2016-07-01 1 views
0

J'ai 3 tabfragments attachés à un tabhost, quand je mets des données dans un textview puis je sélectionne un autre onglet, les données du premier onglet sont effacées, mais je me rends compte que quand je sélectionnez un onglet que le fragment recharge.tabfragment est rechargement chaque fois que je sélectionne l'onglet

Ma question est comment puis-je sélectionner un onglet sans recharger son contenu? Les valeurs de textview sont effacées lorsque je sélectionne le même onglet après avoir sélectionné un autre onglet.

Activité principale où je créé tous les onglets

private void initTabs() 
{ 

    boolean createDoneActivityBtn = true; 

    thMain = (FragmentTabHost) findViewById(R.id.thMain); 


    thMain.setup(this, getSupportFragmentManager(), R.id.flTabContent); 

    thMain.addTab(thMain.newTabSpec("AddLabourCropFieldTab").setIndicator("Cultivos") 
      , AddLabourCropFieldTab.class , null); 

    thMain.addTab(thMain.newTabSpec("AddLabourDoneActivityTab").setIndicator("Info. General") 
      , AddLabourDoneActivityTab.class , null); 

    if( activityName.equals("Riego")) 
    { 
     thMain.addTab(thMain.newTabSpec("AddLabourIrrigationTab").setIndicator("Info. de Riego") 
       , AddLabourIrrigationTab.class , null); 
    } 


    if( activityName.equals("Siembra")) 
    { 
     thMain.addTab(thMain.newTabSpec("AddLabourSowingTab").setIndicator("Info. de Siembra") 
       , AddLabourSowingTab.class, null); 
    } 

    if( activityName.equals("Fertilizacion")) 
    { 
     thMain.addTab(thMain.newTabSpec("AddLabourInputTab").setIndicator("Info. de Insumo") 
       , AddLabourInputTab.class, null); 
    } 


}// 

premier onglet,

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

     this.setRetainInstance(true); 

     initCropFieldTabContent(); 


    }// 

private void initCropFieldTabContent() 
{ 
    AddLabour act = (AddLabour) getActivity(); 

    AlertDialog.Builder builder = new AlertDialog.Builder(act); 
    builder.setTitle("A que cultivos se aplicara la labor?"); 

    List<CustCropField> cropFieldList = CustCropField.listAll(CustCropField.class); 

    Log.d("initcrop", " valor del listado " + cropFieldList.size()); 

    ListAdapter cropfieldAdapter = 
      new ArrayAdapter(act.getApplicationContext() , R.layout.spinner_row, cropFieldList); 

     //lvCropfield = (ListView)act.findViewById(R.id.lvCropfield); 
     lvCropfield = new ListView(act); 
    try 
    { 
     lvCropfield.setAdapter(cropfieldAdapter); 
     lvCropfield.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     lvCropfield.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
      { 
       CustCropField ccf = (CustCropField) parent.getItemAtPosition(position); 
       Log.d("lvpersonal","click al item: "+position+" nombre: "+ccf.toString()); 

       if (cropFieldSelected.contains(ccf)) 
       { 
        cropFieldSelected.remove(ccf); 
        Log.d("lvpersonal","removido crop "+ccf.getName()); 
       } 
       else 
       { 
        cropFieldSelected.add(ccf); 
        Log.d("lvpersonal","agregado crop"+ccf.getName()); 
       } 

       showTextViewContent(R.id.tvCropFieldList); 

      }// 
     }); 
     lvCropfield.setVisibility(View.VISIBLE); 
    } 
    catch(Exception e) 
    { 
     Log.e("error inp act"," error en activityinput-> "+e.getMessage()); 
    } 

    builder.setView(lvCropfield); 
    cropDialog = builder.create(); 

    //aqui el otro listado (el de personal) 
    builder = new AlertDialog.Builder(act); 
    builder.setTitle("personal que aplicara la labor?"); 

    List<Personal> personalList = Personal.listAll(Personal.class); 

    ListAdapter personalAdapter = 
      new ArrayAdapter(act.getApplicationContext() , R.layout.spinner_row, personalList); 


    //lvPersonal = (ListView)act.findViewById(R.id.lvPersonal); 
    lvPersonal = new ListView(act); 
    try 
    { 
     lvPersonal.setAdapter(personalAdapter); 
     lvPersonal.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     lvPersonal.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
      { 
       Personal per = (Personal) parent.getItemAtPosition(position); 
       Log.d("lvpersonal","click al item: "+position+" nombre: "+per.toString()); 

// CustCropField ccf = (CustCropField) parent.getItemAtPosition (position); // Log.d ("lvpersonal", "cliquez sur l'item:" + position + "nombre:" + ccf.toString());

   if (personalSelected.contains(per)) 
       { 
        personalSelected.remove(per); 
        Log.d("lvpersonal","removido personal "+per.getName()); 
       } 
       else 
       { 
        personalSelected.add(per); 
        Log.d("lvpersonal","agregadp personal "+per.getName()); 
       } 

       showTextViewContent(R.id.tvPersonalList); 

      }// 
     });//onitemclicklistener 
     lvPersonal.setVisibility(View.VISIBLE); 
    } 
    catch(Exception e) 
    { 
     Log.e("error inp act"," error en activityinput-> "+e.getMessage()); 
    } 

    builder.setView(lvPersonal); 

    personalDialog = builder.create(); 

    personalBtn = (Button)act.findViewById(R.id.personalBtn); 
    personalBtn.setOnClickListener(this); 
    cropfieldBtn = (Button)act.findViewById(R.id.cropfieldBtn); 
    cropfieldBtn.setOnClickListener(this); 


    //se crean los listados de los items seleccionados 
    cropFieldSelected = new ArrayList<>(); 

    personalSelected = new ArrayList<>(); 

    tvCropFieldList = (TextView)act.findViewById(R.id.tvCropFieldList); 
    tvPersonalList = (TextView)act.findViewById(R.id.tvPersonalList); 


    //se pasan las listas con los campos y personal 
    //seleccionados a la actividad principal 
    act.setCcfList(cropFieldSelected); 
    act.setPerList(personalSelected); 


}// 

Répondre

0

ViewPagers garder:

Votre onglet en cours & 1 onglet de chaque côté dans la mémoire

Ainsi, lorsque vous basculez entre 1 et 2, rien ne se passe sous le capot - il est comme ils sont tout simplement caché/montré.

Utilisez setOffscreenPageLimit()

+0

j'ai lu, mais je ne suis pas en utilisant ViewPager, seulement tabhost, et j'ignore si tabhost met en œuvre viewPager et comment l'obtenir, –