2017-02-21 2 views
-1

In meiner Haupttätigkeit habe ich zwei Fragmente. Einer ist Song-Liste und der zweite ist Favorit. Dieses Fragment enthält ListView und benutzerdefinierten Adapter. Es gibt ein unteres Blatt, das einen Knopf enthält. Wenn dieser Button angeklickt wird, wird der Song zum Favoriten hinzugefügt (zweites Fragment). Ich kann das Lied in den Fragmentfavoriten einfügen, aber es wird nicht zu einem Zeitpunkt angezeigt, wenn wir es hinzufügen. Wir müssen die Anwendung neu starten, um sie in den Favoriten zu bekommen. Die Taste zum Hinzufügen eines Favoriten wird von der Hauptaktivität aus bedient. Gibt es eine Möglichkeit, dass ich meinem Adapter mitteilen kann, dass der Status geändert wurde. (Songs hinzugefügt zu Lieblings-Datenbank verwenden)Wie wird der Adapter benachrichtigt, wenn sich der Status ändert?

Gibt es eine Möglichkeit, ich kann Fragment aktualisieren, wenn es geöffnet ist ???

Dies ist der Code der Hauptaktivität, in dem der Favorit der Schaltfläche ist, der den Namen der Musik in der Datenbank hinzufügt, wenn darauf geklickt wird.

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

Rufen Sie 'notifyDataSetChanged' für den zugrunde liegenden Adapter der Liste in diesem Favoritenfragment auf? –

+0

ja aber nichts passiert. weil die Schaltfläche in der Hauptaktivität ist –

+1

Sie sollten eine mcve, http://stackoverflow.com/help/mcve –

Antwort

0

sollten Sie notifyDataSetChanged() von Ihrem Adapter wie folgt aufrufen:

yourAdapter.notifyDataSetChanged(); 
0

Update, um die Liste mit den neu hinzugefügten Artikel und rufen

adapter.notifyDataSetChanged(); 
0

verwenden in Artikel klicken Sie in die Liste hinzufügen :

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

Wie ich weiß, haben Sie zwei Fragmente. Hier ist eine Lösung wie folgt:

Schritt 1: Sie können zwei Methoden definieren, um Ihren Adapter in Ihrem zwei Fragment zu aktualisieren!

SongFragment: 

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

FavoriteFragment: 

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

Schritt 2: Wenn Ihr wollen Ihre Ansichten aktualisieren und Ihre MainActivity müssen die SongFragment Und FavoriteFragment Instanz halten. können Sie die Methode updateDataList in MainActivity aufrufen. zB:

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

Nur wenn Ihre Datenliste in Ihrem Adapter geändert werden muss, kann es funktionieren !!! – Ethan

0

Sie müssen auch Ihre Fragment aktualisieren, wenn Sie Daten aus der Datenbank abzurufen sind, müssen Sie den Cursor oder Liste aktualisieren, können Sie dies auf Fragment in dieser Methode überprüfen oder Sie können Hörer machen, wo man höre dein hinzugefügtes fav-Ereignis.

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

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

Ich löste es, wenn jemand es will.

Ich habe Broadcast verwendet, wenn Button geklickt wird. Dann wird diese Sendung als Fragment empfangen. Im Empfänger habe ich die Liste gelöscht und dann die Liste erneut hinzugefügt. Jetzt wird der Adapter benachrichtigt, wenn der Status geändert wurde

Verwandte Themen