2017-02-04 2 views
1

Ich habe eine Heimat Aktivität und 3 Kind-Fragmente, in Tätigkeit zu Hause i eine api aufgerufen bin ich dann das Ergebnis an die Recycler Ansicht aktualisieren mag, die in Fragmente enthalten. jetzt funktioniert alles außer notifydatasetchanged() perfekt.RecyclerView notifydatasetchanged nicht von Fragmente aufgerufen

haben Sie eine Idee über Fragmente mir bitte helfen.

HomeActivity.java

 // member variable for the first fragment 

     private FeedsFragment feedsFragment; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 
    // initialised in oncreate  
     feedsFragment = new FeedsFragment(); 

    } 

     private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(feedsFragment, "FEEDS"); 
} 

// this is what i am called when get the api result 
feedsFragment.setUpdateArrayList(updateArrayList); 

FeedsFragment.java

public class FeedsFragment extends Fragment { 

     private RecyclerView recyclerView; 
     private UpdateListAdapter uAdapter; 
     private ArrayList<Updates> updateArrayList; 
     private String TAG = UpdatesActivity.class.getSimpleName(); 

     public FeedsFragment() { 
      // Required empty public constructor 


     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
     } 


     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      updateArrayList = new ArrayList<Updates>(); 

      View thisView = inflater.inflate(R.layout.activity_updates, container, false); 

      recyclerView = (RecyclerView) thisView.findViewById(R.id.recycler_view_updates); 

      uAdapter = new UpdateListAdapter(getActivity(), updateArrayList, new UpdateListAdapter.UpdatesActionListener() { 
       @Override 
       public void onShareButtonTapped(int position) { 

       } 

       @Override 
       public void onOptionsButtonTapped(int position, View v) { 

       } 

       @Override 
       public void onProfileButtonTapped(int position) { 

       } 
      }); 

      LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 

      recyclerView.setLayoutManager(layoutManager); 
      recyclerView.setItemAnimator(new DefaultItemAnimator()); 
      recyclerView.setAdapter(uAdapter); 


      return thisView; 
     } 


     public void setUpdateArrayList(ArrayList<Updates> array){ 

      this.updateArrayList = array; 
      this.recyclerView.getAdapter().notifyDataSetChanged(); 

//Also tried 
// uAdapter.notifyDataSetChanged(); 



     } 

    } 
+1

Sind Sie sicher, dass an den Adapter die Daten ** hinzugefügt tatsächlich wird ** vor 'notifyDataSetChanged()' aufrufen? – OBX

+0

getestete App mit Debugger mit Breakpoints, Array hat 14 Objekte –

+1

Sie rufen 'setUpdateArrayList()' aus der Aktivität, versuchen Sie es in das Fragment aufrufen. zB von 'onCreateView()'. und lemme wissen, – OBX

Antwort

1

Das Problem ist, dass Sie die updateArrayList im Fragmente und nicht in der Liste in dem Adapter ändern.

Sie können eine api in UpdateListAdapter als

public void setData(List<Updates> data){...} 

Dann fügen Sie in setUpdateArrayList dass api aufrufen, bevor Sie notifyDataSetChanged nennen.

0

Danke mich unterstützt, wird das Problem vorübergehend fixiert, indem der upadatelistadapter reinitialisieren

public void setUpdateArrayList(ArrayList<Updates> array){ 

     this.updateArrayList = array; 

     ********** <Reinitialized the adapter here >********** 

     this.recyclerView.getAdapter().notifyDataSetChanged(); 


    } 
+0

statt Neuinitialisierung, versuchen Sie, die updateArrayList zu löschen und verwenden Sie dann addAll-Methode, um Array-Daten hinzuzufügen – Sanjeet

Verwandte Themen