OnItemClickLisener does not work

梦想的初衷 提交于 2020-01-07 07:38:08

问题


i am trying to make list view with clickable items, and every list_item must consist 2 clickable buttons.

But if i add buttons to item layout, iten click listener stops to work...

here is my 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>

here is fragment layout (with 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>

and here is my fragment with onCreateView and 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());
    } 

So here is the question:

is it possible to make clickable listItems with clickable buttons? and if its true, than how to do it? if it false - maybe you have some other solution?


回答1:


I just found solution from here..but by deep clicking...

If any row item of list contains focusable or clickable view then OnItemClickListener won't work.

The row item must have a param like android:descendantFocusability="blocksDescendants".

here you can see example, how your list item should look like

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>

or add these two lines for the inner views

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



回答2:


remove onclick attribute like bellow in your code...

 <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>

and write your adapter as

    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;
        }
    };


来源:https://stackoverflow.com/questions/30572368/onitemclicklisener-does-not-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!