我的活动中通过以下代码动态加载了不同的片段
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;
}
现在,如果我想打电话给#34; fragMethod"在我的一个片段中,我该怎么做?我试过下面,但它没有认识到" fragMethod"除非我把课程放在前面。现在我无法对类进行硬编码(Fragment1或Fragment 2)。
FragmentManager mn = getFragmentManager();
Fragment ft = mn.findFragmentByTag("frag_"+ITEMPOS);
ft.fragMethod(scanResult.toString());
更新 感谢Mike M.,我学会了使用界面:)。它是怎样的
活动类:
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());
}
}
}
片段类:
public class Fragment1 extends Fragment implements IFragment{
@Override
public void populateFromBarcode(String isbn){
System.out.println(isbn);
}
}
答案 0 :(得分:2)
您可以通过两种方式实现这一目标:
<强> 1。使用instanceof:
您可以使用instanceof
Fragment ft = mn.findFragmentByTag("frag_" + ITEMPOS);
if (ft instanceof Fragment1) {
((Fragment1) ft).fragMethod(scanResult.toString());
} else if(ft instanceof Fragment2) {
((Fragment2) ft).fragMethod(scanResult.toString());
}
<强> 2。使用继承:
在baseClass中定义方法,扩展Fragment然后创建所有片段并扩展此baseClass
代码段:
public class BaseFragment extends Fragment {
public void fragMethod(String arg) {
}
}
现在,您可以覆盖所有片段,如:
public class Fragment1 extends BaseFragment {
@Override
public void fragMethod(String arg) {
super.fragMethod(arg);
}
}
希望它有助于ツ
答案 1 :(得分:1)
使用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());