2016-07-01 17 views
0

Ich habe 3 Tabfragmente an einen Tabhost angehängt, wenn ich Daten in eine Textansicht und dann wähle ich eine andere Registerkarte, die Daten der ersten Registerkarte gelöscht wird, aber ich erkenne, dass wenn ich Wählen Sie eine Registerkarte, die das Fragment neu lädt.Tabfragment wird jedes Mal neu geladen ich die Registerkarte

Meine Frage ist, wie kann ich eine Registerkarte auswählen, ohne den Inhalt neu zu laden? Die Werte der Textansicht werden gelöscht, wenn ich dieselbe Registerkarte nach Auswahl einer anderen Registerkarte auswähle.

Haupttätigkeit, wo ich alle Registerkarten erstellt

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); 
    } 


}// 

ersten Register

@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", "klick auf alle Elemente:" + 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); 


}// 

Antwort

0

ViewPagers halten:

Ihre aktuelle Tab & 1 Registerkarte beiden Seiten im Speicher

Also, wenn Sie zwischen 1 und 2 wechseln, wird nichts unter der Haube passiert - es ist wie sie sind einfach zu sein versteckt/gezeigt.

Verwenden setOffscreenPageLimit()

+0

ich habe gelesen, dass, aber im mit ViewPager nicht nur TabHost, und ich ignorieren, wenn TabHost viewPager implementiert und wie es zu bekommen, –

Verwandte Themen