如何从类 BasicActivity 调用方法 stackAFragment 从子类 Sub ?
我希望有机会使用菜单从任何扩展BasicActivity的Activity中替换我的Activity Sub 中的 Fragment 。我将为每个项目菜单在 Sub 中创建一个方法。以下是我看到的一个简单示例:
public class BasicActivity extends FragmentActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.m_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.stad:
TabHost tabHost = (TabHost) getParent().findViewById(android.R.id.tabhost);
tabHost.setCurrentTab(4); //here is me Sub.class
//How to call method stackAFragment here?
break;
default:
return false;
}
return true;
}
}
子类:
public class Sub extends BasicActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sub);
}
public void stackAFragment() {
Fragment f = new StadFr();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.the_frag, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
}
答案 0 :(得分:2)
在BasicActivity
中创建一个可覆盖的方法(例如,使用空实现)并在Sub
中覆盖它。
public class BasicActivity extends FragmentActivity {
protected void onTabChanged(){ }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.stad:
TabHost tabHost = (TabHost) getParent().findViewById(android.R.id.tabhost);
tabHost.setCurrentTab(4); //here is me Sub.class
onTabChanged();
break;
default:
return false;
}
return true;
}
public class Sub extends BasicActivity {
protected void onTabChanged() { stackAFragment(); }
....
}
答案 1 :(得分:1)
您可以创建BasicActivity
类实现方法stackAFragment()
并在子类中覆盖它。您还可以在BasicActivity
中声明方法摘要,然后它将成为一个抽象类。
答案 2 :(得分:0)
super.stackAFragment()
。但必须在BasicActivity
中定义此方法。如果你愿意,它可能是抽象的。
答案 3 :(得分:0)
这应该为您提供所需的功能:
Activity activity = getLocalActivityManager().getActivity( tabHost().getCurrentTabTag() );
if( activity instanceof Sub )
((Sub) activity).stackAFragment();