web-dev-qa-db-ja.com

クリック可能/編集可能なウィジェットを備えたリストビュー

項目レイアウトにクリック可能/編集可能なウィジェット(RadioButton、EditText、またはCheckBox)がある場合、ListViewでOnItemClickListenerを使用できますか?

44
bugzy

この問題 をご覧ください。 ListViewの行にフォーカス可能なアイテムがあると、OnItemClickListener NOTが呼び出されます。ただし、フォーカス/クリック可能なアイテムを連続して使用できないという意味ではありません。 this one などの回避策があります。

また、コールログ画面を見ることができます。 ListViewにクリック可能なアイテム(右側の呼び出しアイコン)があります。 ここのソースコードを参照

68
Samuh

Samuhが言及したリンクのコメント#31を引用してください(これで問題が解決しました)。

実際、それをレイアウトXMLに追加することができます(1倍に膨らんだ場合):Android:descendantFocusability = "blocksDescendants"。

ここにJICを追加すると、Webページは将来ダウンします。

20
khalid13

リストの行項目にフォーカス可能なビューまたはクリック可能なビューが含まれている場合、OnItemClickListenerは機能しません。

行項目にはAndroid:descendantFocusability="blocksDescendants"のようなパラメーターが必要です

<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>
11
Bhavesh Hirpara

多くの複雑なソリューションを試しましたが、これは最も簡単な解決策でした:

次のようにAndroid:focusable="false"を使用するだけです。

<CheckBox
    Android:id="@+id/fav_check_box"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:focusable="false" />
3

2つのベストソリューション

  1. 追加 Android:descendantFocusability="beforeDescendants"からXMLのlistViewへ[〜#〜] or [〜#〜]
  2. 指定された2つの属性をfalseに設定します

お気に入り

   Android:focusable="false"
   Android:focusableInTouchMode="false"

その後、listView.setOnItemClickの代わりにlistView行項目のchild(Button、EditTextなど)イベントを処理します。

0
Xar E Ahmer

私の問題を別の方法で修正しました。私のアイテムには複数のLinearLayoutがありますので、idをlinearayoutに指定し、アダプタークラスのsetOnclickListenerが機能する場合、タッチの元の効果のみが消えます。しかし、このリンク LinearLayoutをボタンのように動作させる は、クリック時にlinearlaoutをボタンのように動作させるのに役立ちます

項目

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginTop="10dp">

    <TextView
        Android:id="@+id/txt_item_followers_name"
        Android:layout_width="250dp"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:gravity="center|start"
        Android:paddingLeft="15dp"
        Android:text="ALi"
        Android:textAppearance="?android:attr/textAppearanceMedium" />

    <ImageView
        Android:id="@+id/imageView"
        Android:layout_width="35dp"
        Android:layout_height="35dp"
        Android:layout_alignParentStart="true"
        Android:layout_below="@+id/txt_item_followers_name"
        Android:layout_marginLeft="10dp"
        Android:src="@drawable/puan_icon" />

    <TextView
        Android:id="@+id/txt_item_followers_mark"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignBottom="@+id/imageView"
        Android:layout_toEndOf="@+id/imageView"
        Android:background="@color/red_400"
        Android:paddingLeft="10dp"
        Android:text="25.5"
        Android:textAppearance="?android:attr/textAppearanceSmall" />

    <LinearLayout
        Android:id="@+id/linear_one"
        Android:layout_width="match_parent"
        Android:layout_height="60dp"
        Android:layout_alignParentTop="true"
        Android:layout_toEndOf="@+id/txt_item_followers_name"
        Android:background="@color/red_400"
        Android:orientation="vertical">

        <ImageView
            Android:id="@+id/btn_item_followers_2b_follow"
            Android:layout_width="100dp"
            Android:layout_height="match_parent"
            Android:layout_alignParentEnd="true"
            Android:layout_marginLeft="10dp"
            Android:src="@drawable/follow_buton" />
    </LinearLayout>


</RelativeLayout>

getViewメソッド内

 @Override
    public View getView(final int position, View convertView,
                        ViewGroup parent) {
        View view = convertView;
        if (convertView == null)
            view = inflater.inflate(R.layout.deneme, null);

        final Followers2 myObj = myList.get(position);
        LinearLayout linear_one = (LinearLayout) view.findViewById(R.id.linear_one); // HERE WE DOMUNİCATE IT
        linear_one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(parentActivity, "One Two", Toast.LENGTH_SHORT).show();
            }
        });

        TextView name = (TextView) view.findViewById(R.id.txt_item_followers_name);
        TextView mark = (TextView) view.findViewById(R.id.txt_item_followers_mark);
        final ImageView btn_follow = (ImageView) view.findViewById(R.id.btn_item_followers_2b_follow);
        name.setText(myObj.getName());
        mark.setText(myObj.getScore());
       /* if (myObj.isFollow() == true) {
            btn_follow.setImageResource(R.drawable.following_buton);
        } else {
            btn_follow.setImageResource(R.drawable.follow_buton);
        }

        btn_follow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Followers2 myObj = myList.get(position);
                if (myObj.isFollow() == true) {
                    btn_follow.setImageResource(R.drawable.following_buton);
                } else {
                    btn_follow.setImageResource(R.drawable.follow_buton);
                }
            }
        });*/

        return view;
    }
0
Sam