2016-03-22 13 views
0

Bei der Anforderung einiger neuer Daten aktualisiert Recycler View Adapter Daten am Ende der vorherigen Daten, wo ich nur die neuesten/frisch angeforderten Daten auf dem Bildschirm anzeigen und die vorherige löschen möchte Daten. Unten ist der Adaptercode, bei Bedarf kann anderer Code angezeigt werden.Recyclerview Aktualisierung der Daten am Ende der vorherigen Daten

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); 

    } 
} 

} 

Aktivitätscode lautet:

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); 
} 

}

Jede Hilfe sehr geschätzt werden würde.

+0

Verwenden Sie keinen Konstruktor, um Daten in recyclerView zu aktualisieren. –

Antwort

1

ich glaube, Sie alle Daten hinzufügen aufzulisten, wenn Sie neue Daten erhalten. Stattdessen die Arraylist löschen und die neuen Daten hinzufügen und notify datasetChanged aufrufen. Das sollte dein Problem lösen. Wenn dies nicht der Fall ist, zeigen Sie bitte Ihre Aktivität oder das Fragment an, das die Recycler-Ansicht enthält.

+0

Sie haben Recht .... es funktionierte aber nicht die ganze Zeit, zum ersten Mal ... es zeigt die vorherige Ausgabe, aber nach dem Klicken die gleiche Aktivität wieder, zeigt es die erwartete Antwort .... Hinzugefügt den Aktivitätscode, wenn Sie können schlagen Sie etwas weiter darüber vor – Umair

0

Verwenden Sie keinen Konstruktor zum Aktualisieren RecyclerView. Konstruktor sollte so sein.

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) 
} 

Einstellung Adapter RecyclerView:

List<Data> dataArray; 

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

recylerView.setAdapter(adapter); 

hinzufügen und Aktualisieren von Daten:

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

gut, ich habe das in Start getan, aber es funktioniert nicht ... immer noch, wenn ich das tue, bekomme ich das gleiche Ergebnis ... dh am Ende des vorherigen outut – Umair

0

Weil Ihre CustomViewHolder eine statische Klasse ist.

ändern es zu

public class CustomViewHolder extends RecyclerView.ViewHolder 
+0

Nö nicht funktioniert, gleiche Ausgabe wie zuvor – Umair

0

Verwenden Sie diesen Code in Ihren Adapter-

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); 

    } 
} 

Und klar das Liste jedes Mal, bevor Sie das neue Element hinzufügen auf sie

In Aktivität ähnliches Videos- oder Fragment

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(); 
} 

Ich hoffe, es wird funktionieren.

Verwandte Themen