Mam dwa fragmenty (Fragment1 i Fragment2), utworzyłem nawigację ActionBar z niestandardową klasą TabListener. Contant każdej zakładki jest jednym z moich fragmentów. Ale teraz mam problem - nie mogę uzyskać dostępu/uzyskać fragmentów instancji.Pobierz bieżący fragment z karty ActionBar
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getSupportActionBar().setNavigationMode(getSupportActionBar().NAVIGATION_MODE_TABS);
Tab tab = getSupportActionBar().newTab()
.setText(R.string.frag1)
.setTabListener(
new MyTabListener(this,
Fragment1.class.getName()));
getSupportActionBar().addTab(tab);
tab = getSupportActionBar().newTab()
.setText(R.string.frag2)
.setTabListener(
new MyTabListener(this,
Fragment2.class.getName()));
getSupportActionBar().addTab(tab);
Fragment1 f1 = (Fragment1) getSupportFragmentManager().findFragmentByTag("FRAG1");
if(f1 != null) {
Toast.makeText(this, "It's not empty", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Toast.makeText(this, "Photo Intent Goes Here", Toast.LENGTH_SHORT).show();
if(data != null) {
Toast.makeText(this, "It's not empty", Toast.LENGTH_SHORT).show();
if (resultCode == RESULT_OK) {
}
} else {
Toast.makeText(this, "It's empty", Toast.LENGTH_SHORT).show();
}
}
private class MyTabListener implements TabListener
{
private SherlockFragment mFragment;
private final Activity mActivity;
private final String mFragName;
public MyTabListener(Activity activity,
String fragName)
{
mActivity = activity;
mFragName = fragName;
}
@Override
public void onTabSelected(Tab tab,
android.support.v4.app.FragmentTransaction ft) {
mFragment = (SherlockFragment) SherlockFragment.instantiate(mActivity,
mFragName);
if(mFragment instanceof Fragment1) {
Fragment1 f1temp = (Fragment1) mFragment;
//Toast.makeText(mActivity, "Frag1", Toast.LENGTH_SHORT).show();
ft.add(android.R.id.content, mFragment,"FRAG1");
}
else {
ft.add(android.R.id.content, mFragment,"ELSE");
}
//Toast.makeText(mActivity, mFragName, Toast.LENGTH_SHORT).show();
}
@Override
public void onTabUnselected(Tab tab,
android.support.v4.app.FragmentTransaction ft) {
ft.remove(mFragment);
mFragment = null;
}
public SherlockFragment getCurrentFragment() {
return mFragment;
}
@Override
public void onTabReselected(Tab tab,
android.support.v4.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
nie mogę używać getSupportFragmentManager().findFragmentById(id)
, bo nie mam id również próbowałem getSupportFragmentManager().findFragmentByTag(tag)
ale to nie działało, bo tylko zadzwonić add()
metoda FragmentTransaction
klasę nie replace()
Czy jest jakiś sposób, aby uzyskać aktualną instancję fragmentu karty, aby móc wywoływać metody fragmentów?
lepiej wyjaśnić, co chcesz zrobić, masz 2 fragmenty, więc chcesz wiedzieć, jak utworzyć metody dla każdej klasy Fragment? – Marckaraujo
Chcę uzyskać instancję fragmentu, która pozwoliłaby mi wywoływać metody tego fragmentu, przekazywać niektóre zmienne, itp. –