2017-09-15 3 views
0

Donc, c'est le AsyncTask que je lance dans onCreateView dans le premier fragmentRecyclerview se Redessiner Lorsque vous naviguez vers une autre vue recycleur dans Tabbed Activité

class GetDatas extends AsyncTask<Void, Void, Void> 
{ 

    Collection<ProfileDataModel> enums = Collections.EMPTY_LIST; 
    @Override 
    protected Void doInBackground(Void... voids) { 
     try{ 
      client = new OkHttpClient(); 
      String response = OkHttpService.GET(client, webUrl); 
      Gson gson = new Gson(); 
      Type type = new TypeToken<Collection<ProfileDataModel>>(){}.getType(); 
      enums = gson.fromJson(response, type); 
      profileDataModels = enums.toArray(new ProfileDataModel[enums.size()]); 
      listAdapter = new ListAdapter(Arrays.asList(profileDataModels), getContext()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 

     profileDataModels = enums.toArray(new ProfileDataModel[enums.size()]); 
     listAdapter = new ListAdapter(Arrays.asList(profileDataModels), getContext()); 
     recyclerView.setAdapter(listAdapter); 
     recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3)); 
    } 
} 

Sur le troisième fragment que j'utilise des données factices qui ne nécessite pas aller chercher

public class MainFragment extends Fragment { 
RecyclerView recyclerView; 
LinearLayout linearLayout; 


@Override 
public View onCreateView(
     LayoutInflater inflater, 
     ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_video_list_pages, container, false); 

    recyclerView = (RecyclerView) rootView.findViewById(R.id.video_list_recycler_view); 
    recyclerView.setHasFixedSize(true); 

    linearLayout = (LinearLayout) rootView.findViewById(R.id.video_list_adapter_rootframe); 

    ListAdapter adapter = new ListAdapter(
      new String[] { 
        "mm","aa","sss","mm","aa","sss","mm","aa","sss","mm","aa","sss","mm","aa","sss" 

      } 
    ); 
    recyclerView.setAdapter(adapter); 

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
    recyclerView.setLayoutManager(linearLayoutManager); 


    return rootView; 
} 

}

Certains d'entre vous peut-être confus par la nomination, mais je tiens à garder cette façon, Le problème est que lorsque je balaye vers le troisième fragment à partir du premier fragment, la vue de recyclage se redessine elle-même. Cela n'arrive pas quand je vais au deuxième fragment, qui contient seulement un textview Quelqu'un peut-il expliquer pourquoi cela se produit?

+0

ce qui est le deuxième fragment faire ?? –

Répondre

0

ok ce qui se produit est le fragment un est détruit quand vous allez au troisième fragment afin d'arrêter cette fonctionnalité, vous devez remplacer destroyItem et garder le champ vide, l'utiliser dans votre classe d'activité

@Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 

    } 

et votre problème sera résolu et la prochaine fois essayer de passer par toutes les méthodes de la classe avant de poster une question.
Supposons que vous ayez 4 fragments dans les onglets, il n'en conservera que 2 et détruira le reste pour vous économiser de la mémoire, il peut également conserver 3 si vous avez l'onglet suivant et précédent comme numéro 2 si vous avez 3 onglets. destroyItem vœux vides!

Ne pas essayer de mettre en œuvre si vous avez le défilement des onglets 10-20 votre application peut se bloquer

+0

Merci beaucoup –

+0

s'il vous plaît pouvez-vous sélectionner la réponse si elle a résolu votre problème pour référence future? – phpdroid