2017-05-21 3 views
1

J'ai une application qui a deux Intents. D'abord afficher certains objets, le deuxième objets préférés qui sont des objets de la première Intent mais marqué comme «favori». Quand je suis à la deuxième Intent - favori, je veux objet non marqué pour devenir l'objet «régulier» et puis quand je clique sur back button la liste des objets rafraîchis et disply un bouton d'activation «ajouter au favori». Mais cela ne fonctionne pas:NotifyDataSetChanged au bouton de retour ne fonctionne pas

préférée 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(); 
    } 
} 

Et le adapter qui doit être rafraîchi:

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

vous devez actualiser votre liste dans 'onResume' dans le premier' Activity' au lieu de 'onBackPressed' –

+0

fonctionne! merci: D – bielas

+0

rafraichir les données dans onResume n'est pas un bon moyen, car si l'utilisateur appuie sur home et retourne à votre activité vous actualisez la liste qui est redondante, mieux vaut onActivityResult et si l'utilisateur change un élément dans la seconde activité, actualisez la liste, Sinon, ne pas actualiser les données. –

Répondre

0

Essayez quelque chose comme ça

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

espoir cette vous aider .. si besoin d'aide que vous pouvez demander.

+0

Mais cette solution supprimera toujours le premier élément. Qu'en est-il quand l'utilisateur enlèverait au milieu? – bielas

+0

@bielas Je viens de donner l'exemple que vous avez besoin de changer quelque chose dans votre arraylist que vous seul pouvez aviser votre adaptateur ... si vous voulez supprimer du milieu que vous devez mettre votre logique pour cela ... en fait, pourquoi voulez-vous rafraîchir votre liste dans onResume()? –

+0

Je voulais le rafraîchir après avoir cliqué sur le bouton de retour sur le téléphone .. – bielas