2017-12-25 4 views
1

Ich habe eine Ansicht Pager in meiner Aktivität. Dieser Pager lädt 2 Fragmente (Fragment1 und Fragment2). Meine Aktivität hat eine Schaltfläche zum Abrufen von Daten vom Server als eine Liste meiner Pojo-Klasse. Fragment1 und Fragment2 enthält RecyclerView.Rückruf von Aktivität zu Fragment senden

Meine Frage ist Wie aktualisiere ich den recycleRView-Adapter von Fragment1 (aus meiner Aktivität), wenn Informationen in meiner Aktivität abgerufen werden?

habe ich eine Schnittstelle in meiner Aktivität:

public interface IloadCallBack { 
    void onLoadAdapter(List<Suser> userList); 
} 

und ich habe einen Setter für diese erstellt:

public void setIloadCallBack(IloadCallBack iloadCallBack) { 
    this.iloadCallBack = iloadCallBack; 
} 

und init es:

iloadCallBack.onLoadAdapter(susers); 

Nun, ich habe Machen Sie einen Hinweis auf Aktivität in mein Fragment, aber ich denke, das ist falsch !! Ja? Was kann ich tun?

Antwort

3

Wie Refresh recyclerView Adapter in Fragmente 1 von meiner Aktivität tun kann, wenn Informationen an meiner Tätigkeit geholt

Sie haben keinen Callback-Mechanismus müssen Daten Fragment Pass, in der Aktivität gehostet.

Erstellen Sie einfach eine Methode in Fragmente refreshList

// in fragment 
public void refreshList(List<Suser> userList){ 
     this.userList.clear();// empty list 
     this.userList.addAll(userList); 
     notifyDataSetChanged(); 
} 

eine globale Referenz halte Instanz fragmentieren und rufen refreshList aus, wo Sie die Antwort erhalten.

public class YourActivity...{ 
    private Fragment fragmentInstance; 


    void someMethodReceivedNewList(){ 
     // where you receive new list in activity 
     if(fragmentinstance!=null) 
      fragmentinstance.refreshList(userList); 

    } 

    void someMethodToLoadFragment(){ 
     fragmentInstance = new YourFragment1(); 
     ... 
    } 
} 
0

Wenn Sie eine Aktion ausführen möchten, wenn ein bestimmtes Ereignis an einem anderen Ort auftritt, z. B. wenn Sie eine Methode in Ihrem Fragment ausführen möchten, wenn in Ihrer Aktivität ein Ereignis eintritt oder umgekehrt, empfehle ich, EventBus zu verwenden.

https://github.com/greenrobot/EventBus

Dies ist die einfache und unkomplizierte Lösung.

+0

Ich brauche eine Referenz meiner Tätigkeit. Ich benutze EventBus, aber jetzt muss ich etwas in Fragment nach dem Abrufen von Daten aus der Aktivität tun. –

+0

ja, Sie können tun, was auch immer Sie tun wollen, wenn Sie Event-Bus verwenden, wird Ihre Event-Bus-Funktion zu erfahren, wie das bestimmte Ereignis passiert ist, jetzt möchte ich diesen Code ausführen, und es wird funktionieren – Thunder

+0

Wenn Sie möchten Good Event Bus Check-out Implementierung des Event-Bus über RxAndroid.Ansonsten empfehle ich dir, auf meine Antwort zu gehen. – Whitebear

0

von Aktivität Fragment Kommunikation:

public static class MainActivity extends Activity 
     implements HeadlinesFragment.OnHeadlineSelectedListener{ 
    ... 

    public void onArticleSelected(int position) { 
     // The user selected the headline of an article from the HeadlinesFragment 
     // Do something here to display that article 

     ArticleFragment articleFrag = (ArticleFragment) 
       getSupportFragmentManager().findFragmentById(R.id.article_fragment); 

     if (articleFrag != null) { 
      // If article frag is available, we're in two-pane layout... 

      // Call a method in the ArticleFragment to update its content 
      articleFrag.updateArticleView(position); 
     } else { 
      // Otherwise, we're in the one-pane layout and must swap frags... 

      // Create fragment and give it an argument for the selected article 
      ArticleFragment newFragment = new ArticleFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ArticleFragment.ARG_POSITION, position); 
      newFragment.setArguments(args); 

      FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

      // Replace whatever is in the fragment_container view with this fragment, 
      // and add the transaction to the back stack so the user can navigate back 
      transaction.replace(R.id.fragment_container, newFragment); 
      transaction.addToBackStack(null); 

      // Commit the transaction 
      transaction.commit(); 
     } 
    } 
} 

von Fragment zu Aktivität Kommunikation:

public class HeadlinesFragment extends ListFragment { 
    OnHeadlineSelectedListener mCallback; 

    // Container Activity must implement this interface 
    public interface OnHeadlineSelectedListener { 
     public void onArticleSelected(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mCallback = (OnHeadlineSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    ... 
} 

Sowohl aus https://developer.android.com/training/basics/fragments/communicating.html genommen werden

Fühlen Sie sich frei gibt einen Blick zu haben, erklären sie alles sehr gut.

+0

dude plz las meine Frage !! Wie können Sie eine Aktivität als Paket senden? –

+0

Ich habe deine Frage gelesen und eine Antwort gepostet. Die Art und Weise, wie Sie Ihr Fragment durch Ihre Aktivität aktualisieren, basiert auf den Methoden, die ich beschrieben habe. Bitte lies meine Antwort noch einmal. – Whitebear

Verwandte Themen