【问题标题】:'setOnItemClickListener/setOnItemLongClickListener' not working after adding 'HorizontalScrollView' to listview将“Horizo​​ntalScrollView”添加到列表视图后,“setOnItemClickListener/setOnItemLongClickListener”不起作用
【发布时间】:2017-04-25 15:55:01
【问题描述】:

我的“标准”列表视图的监听器工作得很好,但我想让单个列表视图项目水平滚动,这需要大量的试验和错误,但它终于奏效了。然而,这让我在聆听任何点击时变得敏感。我希望有一个简单的修复,比如添加另一个属性等。

这是我的听众(最小化):

        listViewAllCards.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) {

                Log.i("LOG: (DP) SHORT","position " + position + " ID: " + id);

                switch (position) {

                // Training
                case 0:
                break;
              }
            }
        });

这是我的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/database_page_list_selector"
                android:orientation="horizontal"
                android:padding="5dp">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:id="@+id/thumbnailDatabase"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginRight="5dp"
            android:background="@drawable/gradient_blue_bg"
            android:orientation="horizontal"
            android:padding="3dp"
            android:weightSum="1">

            <TextView
                android:text="KNOW"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#040404"
                android:textSize="12sp"
                android:textStyle="italic"
                android:scrollHorizontally="true"
                android:layout_alignParentTop="true"
                android:layout_alignParentStart="true"
                android:id="@+id/databaseListViewKnowLevel" />

            <TextView
                android:text="SLEEP"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#040404"
                android:textSize="12sp"
                android:textStyle="italic"
                android:scrollHorizontally="true"
                android:layout_alignParentBottom="true"
                android:layout_alignParentStart="true"
                android:id="@+id/databaseListViewSleepLevel" />

            <TextView
                android:id="@+id/txtlvDictionaryLookUpForeignWord"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/databaseListViewKnowLevel"
                android:background="@android:color/transparent"
                android:cacheColorHint="@android:color/transparent"
                android:ellipsize="end"
                android:listSelector="@android:color/transparent"
                android:maxLines="2"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:scrollHorizontally="true"
                android:text="CHAR"
                android:textColor="#FFFFFF"
                android:textSize="24sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/databaseListViewForeignAlt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_toRightOf="@+id/txtlvDictionaryLookUpForeignWord"
                android:text="ALT"
                android:textColor="#040404"
                android:textSize="12sp"
                android:scrollHorizontally="true"
                android:textStyle="italic" />

            <TextView
                android:id="@+id/databaseListViewForeignWord"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_toRightOf="@+id/databaseListViewForeignAlt"
                android:paddingLeft="10dp"
                android:text="WORD"
                android:textColor="#040404"
                android:textSize="12sp"
                android:scrollHorizontally="true"
                android:textStyle="italic" />

            <TextView
                android:id="@+id/databaseListViewEnglishWord"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ENGLISH"
                android:textColor="#040404"
                android:textSize="12sp"
                android:textStyle="italic"
                android:layout_alignParentBottom="true"
                android:ellipsize="end"
                android:maxLines="2"
                android:scrollHorizontally="true"
                android:layout_toRightOf="@+id/txtlvDictionaryLookUpForeignWord"
                android:layout_toEndOf="@+id/txtlvDictionaryLookUpForeignWord" />

        </RelativeLayout>

    </HorizontalScrollView>

</RelativeLayout>

[编辑] 有趣的是,当我单击水平滚动区域时,它可以工作,因此滚动从列表视图项中窃取“焦点”可能是个问题:

[编辑] 我在类代码中添加了以下内容,OnItem 侦听器仍在“onCreate”sn-p 中(我希望这没问题)。我看到了这个射击,但对实际项目仍然没有敏感:

    private class CustomAllCardsAdapter extends ArrayAdapter<Flashcard> {

        public CustomAllCardsAdapter() {

            super(DatabasePage.this, R.layout.database_page_horizontal_list_view_item,allFlashcards);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View itemView = convertView;

            if (itemView == null) {

                itemView = getLayoutInflater().inflate(R.layout.database_page_horizontal_list_view_item, parent, false);
            }

            final HorizontalScrollView hScrollView = (HorizontalScrollView) itemView.findViewById(R.id.hScrollView);
            hScrollView.setOnTouchListener(new View.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {

                    Log.i("DP: DEBUG", "HSCROLL" + event);

                    hScrollView.getParent().requestDisallowInterceptTouchEvent(true);

                    return false;
                }
            });

【问题讨论】:

    标签: android listview android-arrayadapter onclicklistener


    【解决方案1】:

    添加:

    android:descendantFocusability="blocksDescendants"
    

    到列表项的父布局..

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:descendantFocusability="blocksDescendants"   //add this
                android:background="@drawable/database_page_list_selector"
                android:orientation="horizontal"
                android:padding="5dp">
    

    编辑

    scrollview 触摸事件添加requestDisallowInterceptTouchEvent(true);

    scrollView1 = (ScrollView) findViewById(R.id.scrollview);
    scrollView1.setOnTouchListener(new View.OnTouchListener() {
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            scrollView1.getParent().requestDisallowInterceptTouchEvent(true);
            return false;
        }
    });
    

    【讨论】:

    • 很遗憾,它没有帮助,仍然没有反应。为了确保,我再次删除了 Horizo​​ntalScroll 并且它可以工作。还有其他想法吗?
    • 可能表明我的无知,但由于我不确定将 sn-p 放在哪里,因此需要一段时间才能避免空指针。最后把它放在 ArrayAdapters 'getView' 中。我看到它正在执行(通过 Log.i),但 onClick 仍然没有触发。我将这一行保留在 xml 中(因为它似乎至少使滚动条敏感'。所以你的 sn-p 试图在滚动条上设置一个监听器,只是为了以后禁用它,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多