2016-10-13 1 views
0

J'essaie d'ajouter un SwipeRefreshLayout à un RecyclerView. Comment je fais ça? Ceci est le code que j'ai, mais il ne fonctionne pas:Mise en œuvre de balayage pour actualiser sur RecyclerView

public View onCreateView(LayoutInflater inflater, final ViewGroup container, 
         Bundle savedInstanceState) { 
    View consultantView = inflater.inflate(R.layout.fragment_consultant, container, false); 

    swipeContainer = (SwipeRefreshLayout) consultantView.findViewById(R.id.consultant_recyclerview); 
    retrieveConsultantList(); 
    swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      swipeContainer.setRefreshing(false); 
      retrieveConsultantList(); 
      practiceSpinner.setAdapter(consultantListAdapter); 
      consultantListAdapter.notifyDataSetChanged(); 
     } 
    }); 
} 

Et mon code recycleur:

private void setUpConsultantRecyclerView(List<Consultant> consultantList) { 
    ConsultantRecylerViewAdapter consultantRecylerViewAdapter = new ConsultantRecylerViewAdapter(getContext(), consultantList); 
    consultantRecyclerView.setAdapter(consultantRecylerViewAdapter); 

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); 
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    consultantRecyclerView.setLayoutManager(linearLayoutManager); 

    consultantRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
} 

S'il vous plaît me aider à cela.

+0

Que diriez-vous déplacer 'setRefreshing (false)' jusqu'à ce que vous avez mis à jour la liste? –

+0

Que fait 'retrieveConsultantList()'? Qu'est-ce qui ne fonctionne pas exactement? Ne met-il pas à jour? Ou n'affiche-t-il pas l'animation rafraîchissante? – Bryan

+0

retrieveConsultant() charge ma liste du serveur. son ne charge pas de données du tout – Fuluza

Répondre

2

Essayez cette modification, nous l'espérons peut vous aider à

//move adapter to global variable 
ConsultantRecylerViewAdapter consultantRecylerViewAdapter ; 

public View onCreateView(LayoutInflater inflater, final ViewGroup container, 
        Bundle savedInstanceState) { 
View consultantView = inflater.inflate(R.layout.fragment_consultant, container, false); 
    swipeContainer = (SwipeRefreshLayout) consultantView.findViewById(R.id.consultant_recyclerview); 

    //move to here 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); 
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    consultantRecyclerView.setLayoutManager(linearLayoutManager); 

    //declare list first 
    consultantList = new ArrayList<>(); 
    consultantRecylerViewAdapter = new ConsultantRecylerViewAdapter(getContext(), consultantList); 
    consultantRecyclerView.setAdapter(consultantRecylerViewAdapter); 

    retrieveConsultantList(); 

    swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      swipeContainer.setRefreshing(false); 
      retrieveConsultantList(); 
      practiceSpinner.setAdapter(consultantListAdapter); 
      consultantListAdapter.notifyDataSetChanged(); 
     } 
    }); 
} 

private void retrieveConsultantList(){ 
    //put this code when finish load data from server 
    setUpConsultantRecyclerView(consultantListFromServer) 
} 

//this to refresh your RecyclerView 
private void setUpConsultantRecyclerView(List<Consultant> consultantList) { 
    //clear old list 
    consultantList.clear(); 
    //add new collection to list 
    consultantList.addAll(consultantList); 
    //refresh adapter 
    consultantRecyclerView.notifyDataSetChanged(); 
}