android - ListView收不到点击事件

标签 android android-fragments android-actionbar

我的场景如下:
- 应用程序使用配置为显示选项卡的操作栏。
- 一个选项卡显示包含多个 FrameLayouts 的布局,这些 FrameLayouts 被动态替换为 fragment 。其中一些可以有 ListView。这里的例子进行了简化,只有一个fragment直接添加到xml布局中。
- 第一次打开标签时一切正常
- 切换到另一个选项卡并返回将绘制 ListViews,允许滚动但没有点击事件。

如果我添加其他控件,例如列表下方的按钮,它们将按预期工作。此外,使用这些控件后,列表也会开始获取点击事件。
只有当操作栏按钮打开显示其他 fragment 的 fragment 时,这才可重现。如果他们打开列表 fragment ,一切都会按预期进行。

重要的代码是:
开发指南中的选项卡监听器:

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) {           
    }
}


从操作栏打开的 fragment 的 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;
}

选项卡布局,此处简化为仅显示一个 fragment

<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 不会收到任何调用。与操作栏按钮打开列表的情况相比,这是我发现的唯一区别。不过,我不知道为什么这很重要,也不知道如何解决。

非常感谢任何建议:)

最佳答案

我实现了一个解决方法。不好,也没有解释为什么只有 ListView 中的选择不起作用,而滚动和其他 View 都很好,但它完成了工作。因为在这种情况下没有调用 onCreateView 和 onActivityCreated,所以我强制框架使用 fragment 上的附加/分离来完成它。没有任何明显的性能影响,但我相信存在更好的解决方案。

供引用,代码是:

    Fragment frag = getFragmentManager().findFragmentById(R.id.tabFragment);
    if (frag == null) {
        frag = new TabFragment();
        final FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.tabFragment, frag);
        ft.commit();
    } else {
        final FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(frag);
        ft.attach(frag);
        ft.commit();
    }

我会将此标记为已接受,因为没有发布其他想法。

关于android - ListView收不到点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609030/

相关文章:

android - 从 Uri 转换位图返回 null

android - 当前使用的 APN?

java - 错误 : no suitable constructor found for ArrayAdapter(Tab1Fragment, int,ArrayList <字符串>)

Android - 3 次滑动后 Sherlock 内容消失

Android ActionBar 菜单 : Prevent onPressed Color

安卓 : ActionBar menu item cannot be resolved or isn't a field

android - 如何实现永久的、定期的、后台位置更新?

java - 在android上实现自动颜色(photoshop工具)

android - 如何在单击时在单独的警报对话框中缩放 map fragment

Android Toolbar actionLayout of Switch导致菜单按下时文本跳转