【问题标题】:Android: ItemClickListener in ListView, which contains GridViewAndroid:ListView中的ItemClickListener,其中包含GridView
【发布时间】:2015-10-28 02:26:07
【问题描述】:

我有一个 ListView,这个 listview 中的每个项目都包含一个 gridview 和一个 header textview。现在我想识别用户何时单击整个项目的任何位置,所以我尝试设置一个 onItemClickListener。不幸的是,这似乎不起作用,因为我没有得到我添加到 click 方法的调试日志。

我的 ListView 如下所示

<ListView
                android:id="@+id/listview_previous_issues"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:descendantFocusability="blocksDescendants"
                android:layout_marginBottom="@dimen/article_separator_margin_topbottom"
                android:divider="@null"
                android:dividerHeight="0dp" />

而列表项的GridView是这样的:

<GridView 
android:id="@+id/read_news"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="auto_fit"
android:columnWidth="@dimen/settings_and_issues_read_issues"
android:stretchMode="columnWidth"
android:verticalSpacing="@dimen/paddingSmall"
android:horizontalSpacing="@dimen/paddingSmall"
android:listSelector="#00000000"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"/>

更新:onItemClickListener 的调用

mIssueList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("debug", "Klicke auf Ressort mit der Id " + pRessorts.get(position).mRessortId);

            //Setze die Ressort-ID welche Topnews angezeigt werden
            SharedPreferenceHelper.setLongForKey(Constants.PREFS_SHOWN_TOPNEWS_ID, pRessorts.get(position).mRessortId);

            //Refreshe die Ansicht
            mContext.refresh();

        }
    });

我认为 GridView 正在获取单击事件而不是列表视图,但我不确定这是否正确。谁能指出我必须做什么才能在列表视图中获取点击事件?

【问题讨论】:

  • 你能发布你的点击吗?
  • 很遗憾没有。这篇文章是关于如何在列表视图中实现网格视图。我已经完成了这个及其工作。我想知道如何使用我的 onItemClickListener 检索点击事件,因为列表视图当前没有得到。

标签: android listview gridview onitemclicklistener


【解决方案1】:

所以,我能够自己解决问题。也许这对任何人都有帮助:

我重写了我的自定义gridview的dispatchTouchEvent方法,所以它不会得到触摸事件

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    return false;
}

此外,我在我的 ListAdapter 的 getView 方法中的每个列表项上设置了一个简单的 ClickListener 而不是 onItemClickListener 并且它起作用了。

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多