2

У меня есть функция MainActivity (FragmentActivity), которая имеет FragmentTabHost.Передача данных между вкладками

public class FragmentTabs extends FragmentActivity { 
    private FragmentTabHost mTabHost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragment_tabs); 
     mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"), 
      ClassA.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("classB").setIndicator("Class B"), 
      ClassB.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("classC").setIndicator("Class C"), 
      ClassC.class, null); 
    } 
} 

ClassA, ClassB и ClassC все фрагменты (android.support.v4.app.Fragment).

Мне нужно передать данные (и методы обработки вызовов) на фрагментах. Как я могу получить справку о каждом из фрагментов, как это:

ClassA mClassAFragment = ???; 

Я попытался с помощью getSupportFragmentManager().findFragmentByTag(), и я также пытался исследовать возможности mTabHost. Ничто не может их получить.

Можете ли вы предложить способ сделать это или предложить альтернативный подход?

И я попытался использовал это ...

Bundle arguments = new Bundle(); 
arguments.putString("some id string", "your data"); 
YourFragment fragment = new YourFragment(); 
fragment.setArguments(arguments); 
getSupportFragmentManager().beginTransaction().add(R.id.fragmentid, fragment).commit(); 

, но я не знаю, как можно использовать этот R.id.fragmentid, если моя добавить вкладки хорошо:

mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"), 
       ClassA.class, null); 

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

ответ

1

Определите фрагменты в своей деятельности как общедоступные. Затем в каждом фрагменте вы также ссылаетесь на Activity.

В вашей деятельности:

public ClassAFragment aFragment; 
... 
// during initialization: 
aFragment = new ClassAFragment(); 
// or you get it from your TabHost 
FragmentManager fm = getFragmentManager(); 
aFragment = fm.findFragmentByTag("ClassA"); 
aFragment.mActivity = this; 
// same with B and C 

В ваших фрагментах:

public MainActivity mActivity; 
... 
// in Fragment C 
String newText = mActivity.aFragment.editText.getText().toString() + mActivity.bFragment.editText.getText().toString(); 
textView.setText(newText); 
+0

вы можете показать мне пример? Предположим, у нас есть 3 Fragments .. Tab 1 ==> FragmentTab1 Tab 2 ==> FragmentTab2 Tab 3 ==> FragmentTab3 В Tab1 у вас есть EditText «номер 1" В TAB2 у вас есть «Номер EditText 2 " В Tab3 должна отображаться сумма двух чисел Как вы это делаете? – Roldanhollow

+0

Я обновил свой пример, заполнив textView в Fragment C конкатенированной строкой editText из обоих других фрагментов. – Christian

+0

Я пробовал использовать FragmentManager fm = getFragmentManager(); aFragment = fm.findFragmentByTag ("ClassA"); aFragment.mActivity = this; Но не работает .... aFragment is null ... как его инициализировать? – Roldanhollow

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