項目レイアウトにクリック可能/編集可能なウィジェット(RadioButton、EditText、またはCheckBox)がある場合、ListViewでOnItemClickListenerを使用できますか?
この問題 をご覧ください。 ListView
の行にフォーカス可能なアイテムがあると、OnItemClickListener
NOTが呼び出されます。ただし、フォーカス/クリック可能なアイテムを連続して使用できないという意味ではありません。 this one などの回避策があります。
また、コールログ画面を見ることができます。 ListView
にクリック可能なアイテム(右側の呼び出しアイコン)があります。 ここのソースコードを参照
Samuhが言及したリンクのコメント#31を引用してください(これで問題が解決しました)。
実際、それをレイアウトXMLに追加することができます(1倍に膨らんだ場合):Android:descendantFocusability = "blocksDescendants"。
ここにJICを追加すると、Webページは将来ダウンします。
リストの行項目にフォーカス可能なビューまたはクリック可能なビューが含まれている場合、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>
多くの複雑なソリューションを試しましたが、これは最も簡単な解決策でした:
次のようにAndroid:focusable="false"
を使用するだけです。
<CheckBox
Android:id="@+id/fav_check_box"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:focusable="false" />
2つのベストソリューション
Android:descendantFocusability="beforeDescendants"
からXMLのlistViewへ[〜#〜] or [〜#〜]false
に設定しますお気に入り
Android:focusable="false"
Android:focusableInTouchMode="false"
その後、listView.setOnItemClickの代わりにlistView行項目のchild(Button、EditTextなど)イベントを処理します。
私の問題を別の方法で修正しました。私のアイテムには複数の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;
}