#java #android #methods #fragment
#java #Android #методы #фрагмент
Вопрос:
Как из класса BasicActivity вызвать метод stackAFragment из подкласса Sub?
Я хочу иметь возможность заменить фрагмент в моем подразделе Activity из любого Activity, который расширяет BasicActivity, с помощью menu. Я собираюсь создать метод в 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();
}
}
Ответ №1:
Создайте переопределяемый метод в 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(); }
....
}
Ответ №2:
Вы можете заставить свой BasicActivity
класс реализовать метод stackAFragment()
и переопределить его в своем подклассе. Вы также можете объявить абстрактный метод в своем BasicActivity
, который затем также станет абстрактным классом.
Ответ №3:
super.stackAFragment()
. Но этот метод должен быть определен в вашем BasicActivity
. Он может быть абстрактным, если вы хотите.
Ответ №4:
Это должно предоставить вам желаемую функциональность:
Activity activity = getLocalActivityManager().getActivity( tabHost().getCurrentTabTag() );
if( activity instanceof Sub )
((Sub) activity).stackAFragment();