I have different Fragments loaded in my activity dynamically by code below
Fragment fragment = null;
switch (pos) {
case 1:
fragment = new Fragment1();
break;
case 2:
fragment = new Fragment2();
break;
default:
break;
}
if(fragment != null){
FragmentManager fm = getFragmentManager();
fm.beginTransaction().replace(R.id.frg_container, fragment, "frag_"+pos).commit();
ITEMPOS = pos;
}
Now if I want to call "fragMethod" in one of my fragment, how can I do that? I tried below, but it is not recognizing "fragMethod" unless I put class in front. Now I can't hard code the class as it varies (Fragment1 or Fragment 2).
FragmentManager mn = getFragmentManager();
Fragment ft = mn.findFragmentByTag("frag_"+ITEMPOS);
ft.fragMethod(scanResult.toString());
UPDATE: Thanks to Mike M., I learned to use interface :). Here how it is
Activity Class:
public class navContainer extends Activity {
public interface IFragment
{
public void fragMethod(String arg);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null) {
FragmentManager mn = getFragmentManager();
Fragment ft = mn.findFragmentByTag("frag_"+ITEMPOS);
((IFragment) ft).populateFromBarcode(scanResult.toString());
}
}
}
Fragment Class:
public class Fragment1 extends Fragment implements IFragment{
@Override
public void populateFromBarcode(String isbn){
System.out.println(isbn);
}
}
Use an interface
.
public interface IFragment
{
public void fragMethod(String arg);
}
public class Fragment1 implements IFragment {
public void fragMethod(String arg) {
}
...
}
public class Fragment2 implements IFragment {
public void fragMethod(String arg) {
}
...
}
...
...
FragmentManager mn = getFragmentManager();
Fragment ft = mn.findFragmentByTag("frag_"+ITEMPOS);
((IFragment) ft).fragMethod(scanResult.toString());
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments