NotifyDataSetChanged在后退按钮不起作用

问题描述:

我有一个应用程序有两个Intents。首先显示一些对象,第二个喜欢的对象是第一个对象Intent,但标记为“最喜欢的”。当我在第二个Intent-最喜欢的时候,我想将未标记的对象变成“常规”对象,然后当我点击back button时,对象列表刷新并显示启用按钮“添加到最爱”。但它不工作:NotifyDataSetChanged在后退按钮不起作用

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

而需要被刷新adapter

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

你需要刷新'onResume'中的第一个'Activity'而不是'onBackPressed' –

+0

的作品!感谢:D – bielas

+0

在onResume中刷新数据不是一个好方法,因为如果用户按回到主页并返回到您的活动,则刷新冗余列表,更好的方法是'onActivityResult',如果用户更改第二个活动中的任何项目,则刷新列表,否则不要刷新数据。 –

尝试是这样的

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

希望这帮助你..如果需要任何帮助,你可以要求它。

+0

但是这个解决方案将永远删除第一个元素。什么时候用户将在中间删除? – bielas

+0

@bielas我刚刚举了一个例子,你需要改变你的arraylist中的东西,而不仅仅是你可以通知你的适配器...如果你想从中间删除比你需要把你的逻辑为...实际上你为什么想要在onResume()刷新你的列表? –

+0

我想单击手机上的后退按钮后刷新它.. – bielas