Мой сценарий следующий:
- приложение использует панель действий, настроенную для отображения вкладок.
- одна вкладка отображает макет, содержащий несколько FrameLayouts, которые динамически заменяются фрагментами.Некоторые из них могут иметь ListViews.Приведенный здесь пример упрощен и содержит только один фрагмент, непосредственно добавленный в макет xml.
- при первом открытии вкладки все работает нормально
- переход на другую вкладку и обратно приводит к отображению ListView, разрешает прокрутку, но ненажмите события.
Если я добавлю другие элементы управления, например, кнопку под списком, они будут работать как положено.Кроме того, после использования этих элементов управления список также начнет получать события щелчка.
Это воспроизводимо, только когда кнопки на панели действий открывают фрагмент, отображающий другие фрагменты.Если они открывают фрагмент списка, все работает должным образом.
Важный код:
Слушатель вкладок из Dev Guide:
public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
public TabListener(Activity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
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) {
}
}
метод onCreateView изфрагмент, открытый с панели действий:
View view = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.tab, null);
}
return view;
}
Расположение вкладок, упрощенное здесь для отображения только фрагмента
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/runModesListFragment"
android:name="tab.fail.TabFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</fragment>
</LinearLayout>
И, наконец, список
public class TabFragment extends ListFragment {
String[] listContent = {
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16",
"17"
};
View view = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.tab_layout, null);
}
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, listContent);
getListView().setAdapter(adapter);
}
}
При повторном выборе вкладки onCreateView и onActivityCreated не получают никаких вызовов.Это единственное различие, которое я обнаружил по сравнению со случаем, когда кнопки на панели действий открывают список.Тем не менее, я понятия не имею, почему это важно и как это исправить.
Любое предложение очень ценится:)