2016-03-22 22 views
0

Bazı yeni veriler istendiğinde, önceki en son verilere ait verileri güncellemek için, Geriye Doğru Gösterge Bağdaştırıcısı, en son/taze istenen verileri ekranda göstermek ve öncekileri silmek istediğim için verileri günceller. veri. Aşağıda adaptör kodu, gerekirse diğer kod gösterilebilir.Geridönüş verileri önceki verilere göre güncelleniyor

private LayoutInflater inflater; 
Context context; 
List<Data> dataArray, dataArray1, dataArray2; 

public RecyclerViewAdapter(Context context, List<Data> dataArray) { 
    swap(dataArray1); 
    this.dataArray1 = dataArray; 
    this.context = context; 
    inflater = LayoutInflater.from(context); 
} 
private void swap(List<Data> dataArray1){ 
    if (this.dataArray1 != null) { 
     this.dataArray.clear(); 
     System.out.println(dataArray1); 

    } 

    notifyDataSetChanged(); 
} 

@Override 
public RecyclerViewAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, null); 
    CustomViewHolder holder = new CustomViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(CustomViewHolder holder, int position) { 
    Data current = dataArray1.get(position); 
    //holder.image.setImageResource(current.Limage); 
    holder.textView1.setText(current.heading); 
    holder.textView2.setText(current.date); 

} 

@Override 
public int getItemCount() { 
    return dataArray1.size(); 
} 

public static class CustomViewHolder extends RecyclerView.ViewHolder { 
    //ImageView image; 
    TextView textView1, textView2; 

    public CustomViewHolder(View itemView) { 
     super(itemView); 
     // image = (ImageView)itemView.findViewById(R.id.Limage); 
     textView1 = (TextView) itemView.findViewById(R.id.heading); 
     textView2 = (TextView) itemView.findViewById(R.id.date); 

    } 
} 

} 

Aktivite kodudur:

public RecyclerViewAdapter recyclerViewAdapter; 
Toolbar toolbar; 
public RecyclerView recyclerView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_news); 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    String url = "*****"; 
    new JSONAsync(getApplicationContext()).execute(url); 

    recyclerView = (RecyclerView)findViewById(R.id.recyclerView); 
    recyclerViewAdapter = new RecyclerViewAdapter(MainNews.this, JSONAsync.dataArray); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(this); 
    layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setAdapter(recyclerViewAdapter); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 


} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    return super.onOptionsItemSelected(item); 
} 

}

bir Yardım takdir yüksek olacaktır.

+0

Geri dönüştürücüde verileri güncelleştirmek için kurucu kullanmayın. –

cevap

1

için

Değişim bunu ben size yeni verileri aldıktan sonra listelemek için tüm verileri ekliyoruz düşünüyorum. Bunun yerine arraylist'i temizleyin ve yeni verileri ona ekleyin ve veri kümesini bildirin. Bu, sorunu çözmeli. Eğer lütfen geri dönüştürücü görünümünü içeren Etkinlik veya parçanızı göstermezseniz.

+0

haklısın .... her zaman çalıştı, ama ilk defa ... onun önceki çıkışı gösterir ama aynı aktiviteyi tekrar tıkladıktan sonra, beklenen yanıtı gösterir. bunun hakkında daha fazla şey önermek – Umair

0

RecyclerView'u güncellemek için kurucu kullanmayın. Yapıcı böyle olmalı.

private LayoutInflater inflater; 
Context context; 
List<Data> dataArray; 

public RecyclerViewAdapter(Context context, List<Data> dataArray) { 
    this.dataArray = dataArray; 
    this.context = context; 
    inflater = LayoutInflater.from(context) 
} 

RecyclerView için adaptör Ayar:

List<Data> dataArray; 

dataArray = new ArrayList<>(); 
adapter = new RecyclerViewAdapter(context, dataArray); 

recylerView.setAdapter(adapter); 

eklemek ve güncelleme veri için: En CustomViewHolder statik sınıftır

dataArray.clear(); 
dataArray.add(data); 
adapter. notifyDataSetChanged(); 
+0

iyi, bunu başlangıçta yaptım, ama işe yaramıyor ... hala bunu yapsam da, aynı sonucu alıyorum ... yani bir önceki oututun sonunda – Umair

0

çünkü.

public class CustomViewHolder extends RecyclerView.ViewHolder 
+0

işe yaramadı, daha önce olduğu gibi çıktı – Umair

0

Kullanım içinde bu kod senin Adaptörü-

private LayoutInflater inflater; 
Context context; 
List<Data> dataArray; 

public RecyclerViewAdapter(Context context, List<Data> dataArray) { 
    this.dataArray = dataArray; 
    this.context = context; 
    inflater = LayoutInflater.from(context); 
} 


@Override 
public RecyclerViewAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, null); 
    CustomViewHolder holder = new CustomViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(CustomViewHolder holder, int position) { 
    Data current = dataArray.get(position); 
    //holder.image.setImageResource(current.Limage); 
    holder.textView1.setText(current.heading); 
    holder.textView2.setText(current.date); 

} 

@Override 
public int getItemCount() { 
    return dataArray.size(); 
} 

public static class CustomViewHolder extends RecyclerView.ViewHolder { 
    //ImageView image; 
    TextView textView1, textView2; 

    public CustomViewHolder(View itemView) { 
     super(itemView); 
     // image = (ImageView)itemView.findViewById(R.id.Limage); 
     textView1 = (TextView) itemView.findViewById(R.id.heading); 
     textView2 = (TextView) itemView.findViewById(R.id.date); 

    } 
} 

Ve netListe her onu

Fragment Faaliyet veya yılında

gibi- üzerinde yeni eleman eklemeden önce

List<Data> dataArray = new List(); 

// your other code here.. 


private void yourMethodName() { 
    dataArray.clear(); 
    try{ 

     // your code to get data 

     // new add your new data to list 

     dataArray.add(yourData); 

    }catch (Exception ex){ 
     ex.getMessage(); 
    } 

    // Notify your adapter here 
    adapter.notifyDataSetChanged(); 
} 

Umarım işe yarayacaktır.

İlgili konular