0

Я должен добавить TextViews и EditTexts в Фрагмент (Подробности()), когда я нажимаю на кнопку (Button оных). Мне удалось вставить их, но когда я провёл мои 6 фрагментов и вернулся в первый фрагмент, эти предметы исчезнут.Как отредактировать фрагмент и сохранить его состояние?

Может кто-нибудь мне помочь?

класс FragmentActivity:

public class SubActivityTab extends FragmentActivity 
{ 
    SectionsPagerAdapter spa; 
    ViewPager vp; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.scrolltab_layout); 

     spa = new SectionsPagerAdapter(getSupportFragmentManager(), this); 

     vp = (ViewPager) findViewById(R.id.pager); 
     vp.setAdapter(spa); 
    } 
} 

FragmentPagerAdapter класс:

public class SectionsPagerAdapter extends FragmentPagerAdapter 
{ 
    Context c; 

    public SectionsPagerAdapter(FragmentManager fm, Context c) { 
     super(fm); 
     this.c = c; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch(position) 
     { 
      case 0: 
      return Details.newInstance(); 
      ... 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
    return 6; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) 
     { 
     case 0: 
     return c.getString(R.string.tab1).toUpperCase(l); 
       ... 
     } 
     return null; 
    }  
} 

Фрагмент Класс:

public final class Details extends Fragment { 

    public static View layout; 
    public static LinearLayout ll; 

    public static Details newInstance() 
    {  
     return new Details(); 
    } 

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

     layout = inflater.inflate(R.layout.details, container, false); 
     ll = (LinearLayout) layout.findViewById(R.id.linearlayout2); 
     Button add = (Button) layout.findViewById(R.id.button_add); 

     add.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

     insertLine(); 
     insertClassEditText(); 
     insertLevel(); 
     }}); 

     return layout; 
    } 

    private void insertLine() 
    { 
     View temp = (View) layout.findViewById(R.id.line); 
     View v = new View(temp.getContext()); 
     v.setBackgroundColor(Color.rgb(209, 209, 209)); 
     v.setId(0); 
     v.setLayoutParams(temp.getLayoutParams()); 
     ll.addView(v); 

    } 

    private void insertClassEditText() 
    { 
     TextView label_classe = (TextView) layout.findViewById(R.id.textView10); 
     EditText edit_classe = (EditText) layout.findViewById(R.id.editText9); 

     TextView new_label_classe = new TextView(label_classe.getContext()); 
     EditText new_edit_classe = new EditText(edit_classe.getContext()); 

     new_label_classe.setId(1); 
     new_edit_classe.setId(2); 

     new_label_classe.setText("Label"); 
     new_label_classe.setTextAppearance(new_label_classe.getContext(), android.R.style.TextAppearance_Medium); 
     ll.addView(new_label_classe); 

     new_edit_classe.setInputType(edit_classe.getInputType()); 
     new_edit_classe.setLayoutParams(edit_classe.getLayoutParams()); 
     ll.addView(new_edit_classe); 

    } 

    private void insertLevel() 
    { 
     TextView label_lv = (TextView) layout.findViewById(R.id.textView11); 
     EditText edit_lv = (EditText) layout.findViewById(R.id.editText10); 

     TextView new_label_lv = new TextView(label_lv.getContext()); 
     EditText new_edit_lv = new EditText(edit_lv.getContext()); 

     new_label_lv.setId(3); 
     new_edit_lv.setId(4); 

     new_label_lv.setText(label_lv.getText()); 
     new_label_lv.setTextAppearance(new_label_lv.getContext(), android.R.style.TextAppearance_Medium); 
     ll.addView(new_label_lv); 

     new_edit_lv.setInputType(edit_lv.getInputType()); 
     new_edit_lv.setLayoutParams(edit_lv.getLayoutParams()); 
     ll.addView(new_edit_lv); 
    } 
} 

ответ

1

Я считаю, что ViewPager перерабатывает взгляды, когда вы садитесь, и поэтому, когда вы возвращаетесь, он восстанавливается с onCreateView.

Я бы предложил установить несколько тегов и перейти на onSaveInstanceState.

private void onSaveInstanceState(Bundle b) { 
    if (label_classe != null) { 
    b.putBoolean("label_classe", true); 
    } 
} 

Тогда в onCreateView вы берете savedInstanceState, проверить, что были созданы элементы и воссоздать их.

Так Фрагмент:

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

    .... 
    if (savedInstanceState.getBoolean("label_classe")) { 
     insertClassEditText(); 
    } 

    .... 
} 

И просто чтобы быть уверенным в деятельности:

public class SubActivityTab extends FragmentActivity 
{ 
    SectionsPagerAdapter spa; 
    ViewPager vp; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.scrolltab_layout); 

     spa = new SectionsPagerAdapter(getSupportFragmentManager(), this); 

     vp = (ViewPager) findViewById(R.id.pager); 
     vp.setSaveState(true); 
     vp.setSaveFromParentEnabled(true); 
     vp.setAdapter(spa); 
    } 
} 
+0

Спасибо ARTŪRS для вашего ответ, но я пробовал это и не работал ... такая же проблема – Mondo

0

Try изменить метод onCreateView к:

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

    if(layout ==null){ 
     layout = inflater.inflate(R.layout.details, container, false); //Dont inflate every time.layout saved, data of layout,like EidtText also saved. 
    } 

    ViewParent parent = mLayout.getParent(); 
    if(parent!=null){ 
     ((ViewGroup)parent).removeView(layout);//the view will be add to NoSaveStateFrameLayout after onCreateView,so remove self everytime 
    } 
    return layout; 
} 
Смежные вопросы