2017-05-21 15 views
1

私は2つのIntentsを持つアプリを持っています。最初にいくつかのオブジェクトを表示します。最初のオブジェクトは「Intent」のオブジェクトで、「お気に入り」とマークされています。私が2番目にいるときは、お気に入りのオブジェクトを「普通の」オブジェクトにする必要があります。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

あなたは 'onBackPressed'の代わりに' 'Activity''の' onResume'であなたのリストをリフレッシュする必要があります –

+0

作品!ありがとうございます:D – bielas

+0

あなたがあなたの活動に家を押し戻して冗長なリストをリフレッシュすると、より良い方法は 'onActivityResult'であり、ユーザが2番目のアクティビティでアイテムを変更するとリストをリフレッシュするので、onResumeのデータをリフレッシュするのは良い方法ではありません。それ以外はデータを更新しません。 –

答えて

0

この

  @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私はちょうどあなたがURアダプターに通知することができますよりもUR arraylistで何かを変更する必要がある例を与えた...あなたはUUのロジックを置く必要があるよりも中から削除したい場合...実際にはなぜonResume()のurリストを更新しますか? –

+0

電話で戻るボタンをクリックした後にリフレッシュしたかった。 – bielas

関連する問題