EDIT Я отредактировал предыдущий вопрос, который я решил. Большое спасибо за ответы.
У меня есть графический интерфейс с 3 вкладками (Новости, Стратегия и История), в одной из них (Новости) я загружаю ExpandableListView, и когда пользователь щелкает один из элементов из списка, он загружает другой фрагмент, содержащий сведения о выбранном элементе. . Мне удалось заменить фрагмент на этой вкладке другим фрагментом, используя этот код:
CategoryTab categories = new CategoryTab();//Fragment 2
FragmentManager manager = activity.getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(this.getId(), categories, "News");
//transaction.replace(android.R.id.content, categories, "News");
transaction.addToBackStack(null);
transaction.commit();
Когда фрагмент секунд загружается на вкладке «Новости», все остальные вкладки показывают этот фрагмент. Я использую этот прослушиватель для управления навигацией по вкладкам
public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
private final Bundle mArgs;
private Fragment mFragment;
public TabListener(Activity activity, String tag, Class<T> clz) {
this(activity, tag, clz, null);
}
public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
// Check to see if we already have a fragment for this tab, probably
// from a previously saved state. If so, deactivate it, because our
// initial state is that a tab isn't shown.
mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached()) {
FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
ft.detach(mFragment);
ft.commit();
}
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
}
}
Мой вопрос: почему на всех вкладках после замены отображается один и тот же фрагмент? и как я могу смоделировать кнопку «Назад» со значком, представленным на панели действий, чтобы снова загрузить фрагмент 1 на вкладке «Новости»?
Любая помощь будет оценена
ПД: извините за мой английский
getActivity().getApplicationContext()
наgetActivity()
, например, при настройкеIssueAdapter
. - person CommonsWare   schedule 28.01.2013