问题 OnItemLongClickListener无法在自定义列表视图中使用


我希望在长按自定义列表视图中的项目后显示上下文菜单。我正在使用 ActionBarSherlock。尝试使用Toast通知进行调试我发现不会触发Long click事件。如何解决这个问题?

m_vwJokeLayout=(ListView)findViewById(R.id.jokeListViewGroup);
m_vwJokeLayout.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                if(m_vwActionMode!=null)
                {
                    Toast.makeText(getApplicationContext(), "Inside On Itemlongclick", Toast.LENGTH_LONG).show();
                    return false;
                }
                Toast.makeText(getApplicationContext(), "Inside On Itemlongclick", Toast.LENGTH_LONG).show();
                m_vwActionMode=getSherlock().startActionMode(m_vwCallback);
                view.setSelected(true);
                return true;
            }


        });

xml代码我的地方 ListView 声明如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="fill_parent">
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
    >

   <Button 
        android:id="@+id/addJokeButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add_joke_button"
        />
    <EditText 
        android:id="@+id/newJokeEditText"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="2"
        android:hint="@string/enter_text_edittext"
        />


    </LinearLayout>

    <ListView
        android:id="@+id/jokeListViewGroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

</ListView>



</LinearLayout>

的xml代码 View 在自定义中 ListView 如下:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:weightSum="3" >

    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:gravity="center_vertical"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/jokeTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:ellipsize="middle"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="Hello,"
            android:textSize="16px"


             />

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <RadioGroup
            android:id="@+id/ratingRadioGroup"
            android:layout_width="40dp"
            android:layout_height="60dp"
            android:layout_marginRight="10dp"
            android:gravity="center" 

           >

            <RadioButton
                android:id="@+id/likeButton"
                android:background="@drawable/like"
                android:button="@null"
                />

            <RadioButton
                android:id="@+id/dislikeButton"
                android:background="@drawable/dislike"
                android:button="@null"
                />
        </RadioGroup>

    </LinearLayout>

   </LinearLayout> 

10023
2017-08-19 11:01


起源



答案:


这是因为listitem布局中的radiobutton的可聚焦性。

将下面的行添加到ListView的项目布局的根布局中。

android:descendantFocusability="blocksDescendants"

15
2017-08-19 11:13



有用!谢谢! :) - Md. Arafat Al Mahmud


答案:


这是因为listitem布局中的radiobutton的可聚焦性。

将下面的行添加到ListView的项目布局的根布局中。

android:descendantFocusability="blocksDescendants"

15
2017-08-19 11:13



有用!谢谢! :) - Md. Arafat Al Mahmud


您应该使用listview的onItemLongClickListener,如下所示:

lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int pos, long id) {
            // TODO Auto-generated method stub

            Log.v("long clicked","pos"+" "+pos);

            return true;
        }
    }); 

请注意,侦听器不是AdapterView类的衍生物!


-1
2017-08-19 11:12



没有以这种方式工作 - Md. Arafat Al Mahmud