2017-05-21 7 views
1

Ich habe eine App, die zwei Intents hat. Zuerst werden einige Objekte angezeigt, die zweiten Objekte sind Objekte aus der ersten Intent, aber als 'Favorit' markiert. Wenn ich bei der zweiten Intent - Favorit bin, möchte ich ein Objekt als "normales" Objekt unmarkiert werden und dann, wenn ich back button klicken Sie auf die Liste der Objekte aktualisiert und zeigen eine Schaltfläche "zum Favoriten hinzufügen". Aber es funktioniert nicht:NotifyDataSetChanged auf der Rückseite funktioniert nicht

Lieblings intent:

public class FavWashActivity extends Activity{ 

    private RecyclerView mRecyclerView; 
    private RecyclerView.Adapter mAdapter; 
    private RecyclerView.LayoutManager mLayoutManager; 

    private MyAdapter myAdapter; 

    private List<WashLocation> washLocations; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.favorite_wash); 

     mRecyclerView = (RecyclerView) findViewById(R.id.fav_recycler_view); 
     DataBaseHelper dataBaseHelper = new DataBaseHelper(getApplicationContext()); 
     washLocations = dataBaseHelper.getFavouriteWashLocation(); 
     mAdapter = new MyAdapterFavWash(washLocations, this); 
     mRecyclerView.setAdapter(mAdapter); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     myAdapter = new MyAdapter(null, this, null); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
      onBackPressed(); 
     } 
     return false; 
    } 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     myAdapter.notifyDataSetChanged(); 
    } 
} 

Und die adapter, die aktualisiert werden muss:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private List<WashLocation> washLocations; 
    private LayoutInflater layoutInflater; 
    private DataBaseHelper dataBaseHelper; 
    private Map<String, Integer> queueToWash; 

    public MyAdapter(List<WashLocation> washLocations, Context context, Map<String, Integer> queueToWash) { 
     layoutInflater = LayoutInflater.from(context); 
     this.washLocations = washLocations; 
     dataBaseHelper = new DataBaseHelper(context); 
     this.queueToWash = queueToWash; 
    } 
+1

Sie müssen Ihre Liste in 'onResume' in der ersten' Activity' aktualisieren anstelle von 'onBackPressed' –

+0

funktioniert! Danke: D – bielas

+0

das Aktualisieren von Daten in onResume ist kein guter Weg, denn wenn der Benutzer nach Hause und zurück zu Ihrer Aktivität drückt, aktualisieren Sie die Liste, die überflüssig ist, besser ist 'onActivityResult' und wenn Benutzer irgendein Element in der zweiten Aktivität ändert, aktualisieren Sie Liste, Ansonsten aktualisieren Sie die Daten nicht. –

Antwort

0

Probieren Sie etwas wie dieses

  @Override 
      public void onBackPressed() { 
       super.onBackPressed(); 
       washLocations.remove(1); 
       //need to change in arraylist than only you can notify your adapter. 
       //add some data in array list or remove data.than try to notify it. 
       myAdapter.notifyDataSetChanged(); 
      } 

hoffen, dass diese Ihnen helfen, wenn Sie Hilfe brauchen, als Sie danach fragen können.

+0

Aber diese Lösung wird immer das erste Element entfernen. Was ist, wenn der Benutzer in der Mitte entfernen würde? – bielas

+0

@Bielas Ich gab nur ein Beispiel, dass Sie etwas in Ihrem Arraylist ändern müssen, als nur können Sie Ihren Adapter benachrichtigen ... Wenn Sie aus der Mitte entfernen möchten, als Sie Ihre Logik für das ... eigentlich brauchen, warum Sie wollen Aktualisiere deine Liste in onResume()? –

+0

Ich wollte es nach dem Klicken auf die Zurück-Taste auf dem Telefon aktualisieren .. – bielas

Verwandte Themen