2013-11-07 4 views
0

У меня есть две ДЕЯТЕЛЬНОСТИ (A и B). У меня ФРАГМЕНТ F в ДЕЯТЕЛЬНОСТИ A. Мой фрагмент F коинтайн 3 EditText (1,2,3).Возобновляющее состояние активности фрагмента

Мое приложение получает строку из Activity B и помещает ее в EditText 3. У меня нет проблем с этим. Моя проблема в том, что когда я ввожу что-то в EditText 1 и 2, я получаю строку из ACTIVITY B и помещаю ее в EditText 3, вся информация, введенная в EditText 1 и 2, ушла.

Мой вопрос, как будет информация, которую я напечатал в EditText 1 и 2 пребывания, даже если я получаю строку из АКТИВНОСТИ В до EditText 3. Вот мой код:

АКТИВНОСТЬ

public class ActivityA extends FragmentActivity { 

    ViewPager viewPager = null; 
    PageIndicator pIndicator; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_a); 

     viewPager = (ViewPager) findViewById(R.id.pager); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     viewPager.setAdapter(new MyAdapter(fragmentManager)); 

     pIndicator = (PageIndicator)findViewById(R.id.indicator); 
     pIndicator.setViewPager(viewPager); 
    } 

    public class MyAdapter extends FragmentStatePagerAdapter { 

     public MyAdapter (FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int i) { 
      Fragment fragment = null; 

      if (i == 0) 
      { 
       fragment = new FragmentF(); 
      } 
      if (i == 1) 
      { 
       fragment = new FragmentG(); 
      } 
      if (i == 2) 
      { 
       fragment = new FragmentH(); 
      } 
      if (i == 3) 
      { 
       fragment = new FragmentI(); 
      } 
      return fragment; 
     } 

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

     @Override 
     public CharSequence getPageTitle(int position) { 

      if (position == 0) 
      { 
       return "TAB.F"; 
      } 
      if (position == 1) 
      { 
       return "TAB.G"; 
      } 
      if (position == 2) 
      { 
       return "TAB.H"; 
      } 
      if (position == 3) 
      { 
       return "TAB.I"; 
      } 
      return null; 
     } 
    } 

    public void btn_to_actb(View view) { 

     Intent intent = new Intent(this, ActivityB.class); 
     startActivity(intent); 
    } 

АКТИВНОСТИ В

public final static String EXTRA_MESSAGE = "com.sample.MESSAGE"; 

    // onClick get button from activity B layout 
    public void get(View view) { 
     Intent intent = new Intent(this, ActivityA.class); 
     TextView textView = (TextView)findViewById(R.id.coordinates); 
     String message = textView.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent);  
    } 

ФРАГМЕНТ F

EditText editText; 

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

     String num = getActivity().getIntent().getStringExtra("com.sample.MESSAGE"); 

     View v = inflater.inflate(R.layout.fragmentf, container, false); 

     // EditText3 from fragment F layout 
     editText = (EditText) v.findViewById(R.id.edittext3);  
     editText.setText(num); 
     return v; 
    } 

ответ

0

Обратите внимание, что при запуске своего намерения активности А из В, Activity A может быть воссозданы о возобновилось в зависимости от того, если А был остановлен или если это было еще на памяти.

Ваш фрагмент F может быть воссоздан или возобновлен в зависимости от того, как вы управляете фрагментом в своей деятельности A, чтобы вы потеряли всю информацию, хранящуюся в editTexts.

Было бы полезно, если вы разместите код вашей деятельности А.

Лучший способ сохранить данные фрагментов между переходами, это сохранить его в вашей деятельности и получить его из фрагмента.

В вашем фрагменте

@Override 
    public void onResume(){ 
     EditText1.setText(getActivity().getTextOfEditText1()); 
     EditText2.setText(getActivity().getTextOfEditText2()); 
     super.onResume(); 
    } 

** А в вашей деятельности **

public class A extends Activity{ 
     //... 
     private String textOfEditText1; 
     private String textOfEditText2; 


     //... Other stuff 

     public String getTextOfEditText1(){ 
       return textOfEditText1; 
     } 
     public String getTextOfEditText2(){ 
       return textOfEditText2; 
     } 

} 

Вы должны иметь методы, чтобы установить Строки из фрагмента при их изменении.

Надеется, что это помогает :)

+0

теперь я добавил свою АКТИВНОСТЬ код сэр .. – speedsir

+0

я получаю сообщение об ошибке в EditText1.setText (getActivity() getTextOfEditText1().); он говорит: «Метод getTextOfEditText1() не определен для типа FragmentActivity». То же, что и EditText2. Я изменил его на EditText1.setText (((ActivityA) getActivity()). GetTextOfEditText1()); но мое приложение падает, когда я пытался его запустить. – speedsir

+0

Без следа я бы сказал, что у вас есть исключение NullPointerException. Вы должны позаботиться о Строках, возвращенных Управлением. Код, который я написал, очень прост, более сложным может быть что-то вроде этого. @Override public void onResume() { Строка text1 = getActivity(). GetTextOfEditText1(); if (text1! = Null) { EditText1.setText (text1); } // такой же с edit2 super.onResume(); } – jDur

Смежные вопросы