OnItemClickLisener不起作用

时间:2015-06-01 11:29:44

标签: android listview button onitemclicklistener listitem

我正在尝试使用可点击的项目制作列表视图,每个list_item必须包含2个可点击的按钮。

但是如果我向项目布局添加按钮,那么点击监听器就会停止工作......

这是我的item_layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:gravity="center">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp">
        <com.pkmmte.view.CircularImageView
            android:id="@+id/friends_new_photo_circularImageView"
            android:layout_gravity="center"
            android:layout_width="@dimen/user_friends_width"
            android:layout_height="@dimen/user_friends_height"
            android:src="@mipmap/ic_launcher"
            app:border="true"
            app:border_color="#EEEEEE"
            app:border_width="2dp"
            app:shadow="true"/>
        <ImageView
            android:id="@+id/friends_new_online_status_imageview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/online_status"
            android:layout_alignBottom="@+id/friends_new_photo_circularImageView"
            android:layout_alignRight="@+id/friends_new_photo_circularImageView"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="5dp"/>
    </RelativeLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_weight="1">
        <TextView
            android:id="@+id/friends_new_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:textStyle="bold"/>
        <ImageView
            android:id="@+id/friends_new_rating"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:src="@drawable/stars"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:onClick="true"
            android:text="Add"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:onClick="true"
            android:text="Dismiss"/>
    </LinearLayout>
</LinearLayout>

这里是片段布局(使用listView):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
    android:id="@+id/listview_friends"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/ListViewStyle"/>

</LinearLayout>

这是我的onCreateView和onItemClickListener的片段:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_friends_listview, container, false);
        ButterKnife.inject(this, rootView);

        String[] mNames = {
                "Example 1",
                "Example 2"
        };

        mFriendsAdapter = new FriendsAdapter(getActivity(), null, 0);

        List<String> mList = new ArrayList<>(Arrays.asList(mNames));
        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(
                getActivity(),
                R.layout.list_item_friends_new,
                R.id.friends_new_name,
                mList
        );

        mListView.setOnItemClickListener(this);
        mListView.setAdapter(mAdapter);

        return rootView;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        FriendsFragment.openCurrentUser(getActivity());
    } 

所以这就是问题:

是否可以使用可点击按钮制作可点击的listItem? 如果它是真的,那该怎么做呢?如果它是假的 - 也许你有其他解决方案?

2 个答案:

答案 0 :(得分:3)

我刚刚从这里找到解决方案......但是通过深度点击......

如果列表中的任何行项目包含可关注或可点击的视图,则OnItemClickListener将无效。

行项必须包含android:descendantFocusability="blocksDescendants".

之类的参数

在这里,您可以看到示例,列表项应该如何显示

row_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:descendantFocusability="blocksDescendants"
android:gravity="center_vertical" >

// your other widgets here

</LinearLayout>

或为内部视图添加这两行

android:focusable="false"
android:focusableInTouchMode="false"

答案 1 :(得分:1)

删除代码中的明亮属性...

 <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="35dp"
                android:onClick="true"//remove this
                android:text="Add"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="35dp"
                android:onClick="true" //remove this
                android:text="Dismiss"/>
        </LinearLayout>

并将您的适配器写为

    ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(
            getActivity(),
            R.layout.list_item_friends_new,
            R.id.friends_new_name,
            mList
    ){

        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //your action on button click
            }
        };

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            Button button = (Button) view.findViewById(R.id.yourButtonID);
            button.setOnClickListener(listener);
            return view;
        }
    };