2017-02-21 4 views
-1

私の主な活動には2つの断片があります。 1つは曲リストで、2番目はお気に入りです。この両方のフラグメントには、ListViewとカスタムアダプターが含まれています。ボトムシートにはボタンがあります。そのボタンがクリックされると、その曲がお気に入りに追加されます(2番目の断片)。私はその曲を好きな断片に追加することができますが、追加するときは一度に表示されません。アプリケーションを再起動してお気に入りに追加する必要があります。お気に入りを追加するボタンはメインアクティビティから操作されます。私のアダプタに状態が変更されたことを通知できる方法はありますか?(好きな使用データベースに追加された曲)状態が変わったときにアダプターを通知する方法は?

開封時にフラグメントをリフレッシュする方法はありますか?

お気に入りは、クリックするとデータベースに曲名が追加されるボタンです。

favourite.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(x==0) {       
    favourite.setImageResource(R.drawable.ic_favorite);x=1; 
        boolean isinserted = 
    mydb.insertdata(collections.get(a).getsong().toString()); 

        if (isinserted == true) { 
         Toast.makeText(MainActivity.this, "Added as favorite", Toast.LENGTH_LONG).show(); 
         x=1; 
        } 
        else 
        { 
         Toast.makeText(MainActivity.this, "data not inserted", Toast.LENGTH_LONG).show(); 
        } 

       } 

       else{favourite.setImageResource(R.drawable.ic_favorite_border); 
        int deletedrow = mydb.deleteData(collections.get(a).getsong()); 
        if(deletedrow>0){Toast.makeText(MainActivity.this, "removed from favorite", Toast.LENGTH_LONG).show(); 
         finish(); 
         startActivity(getIntent()); 

         x=0; 
        } 
        else {Toast.makeText(MainActivity.this, " not removed from favorite", Toast.LENGTH_LONG).show(); 
        } 
       } 

      } 
     }); 
+0

好きなフラグメントのリストの基になるアダプタに対して 'notifyDataSetChanged'を呼びますか? –

+0

はい、何も起こりません。ボタンがメインアクティビティにあるため –

+1

mcveを提供する必要があります。 –

答えて

0

あなたは、このようなあなたのアダプタからnotifyDataSetChanged()を呼び出す必要があります:

yourAdapter.notifyDataSetChanged(); 
0

更新新しく追加された項目とリストとアイテムの中にこれを使用し

adapter.notifyDataSetChanged(); 
0

を呼び出しリストに追加するためにクリック:

public Both[] boths; 
public ArrayList<Both> both = new ArrayList<Both>(); 

onItemClick:

String itemValue = (String) listview.getItemAtPosition(i); 
if (boths == null) { 
       boths = new Both[]{ \\Both is your Object Class name 
         new Both(itemValue) 
       }; 
      } 
      both.addAll(Arrays.asList(boths)); 
      adapters.notifyDataSetChanged(); \\adapters is your Adapter Name 
      adapters.setAdapter(both); 
0

ご存じのように、2つの断片があります。

手順1: 2つの方法で2つの方法でアダプタを更新することができます。

SongFragment: 

public void updateDataList(){ 
    if(songAdapter != null){ 
     songAdapter.notifyDataSetChanged(); 
    } 
} 

FavoriteFragment: 

public void updateDataList(){ 
    if(favoriteAdapter != null){ 
     favoriteAdapter.notifyDataSetChanged(); 
    } 
} 

ステップ2: あなたの希望は、あなたのビューを更新するために、そしてあなたのMainActivityがSongFragmentとFavoriteFragmentインスタンスを保持しなければなりません。 MainActivityのupdateDataListメソッドを呼び出すことができます。例えば:また、あなたは、データベースからデータを取得している場合は、あなたのフラグメントを更新する必要があり

songFragment.updateDataList(); 
favoriteFragment.updateDataList(); 
+0

アダプタでデータリストを変更する必要がある場合のみ、動作します。 – Ethan

0

は、あなたのカーソルまたはリストを更新する必要があり、あなたがこの方法でフラグメント上でこれを確認することができますかあなたはどこのことができます。リスナーを作ることができます追加されたfavイベントを聴いてください。

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if (isVisibleToUser) { 

     }else{ 
      // fragment is no longer visible 
     } 
    } 
0

誰かがそれを望むなら、私はそれを解決しました。

ボタンがクリックされたときにブロードキャストを使用しました。その後、そのブロードキャストはフラグメントで受信されます。受信者で私はリストをクリアして、再びリストを追加しました。状態が変更された場合、アダプタに通知されます

関連する問題