Ist es möglich, einen OnItemClickListener in einer ListView zu verwenden, wenn das Items-Layout über ein anklickbares/editierbares Widget (RadioButton, EditText oder CheckBox) verfügt?ListView mit anklickbarem/editierbarem Widget
Antwort
Vielleicht möchten Sie einen Blick auf this issue werfen. Wenn Sie ein fokussierbares Element in einer Zeile eines ListView
haben, wird OnItemClickListener
NICHT aufgerufen. Das bedeutet jedoch nicht, dass Sie keine fokussierbaren/anklickbaren Elemente in einer Zeile haben können. Es gibt einige Problemumgehungen wie this one.
Sie können auch den Bildschirm "Anrufprotokolle" anzeigen. Es hat eine ListView
mit anklickbarem Element (das Anrufsymbol auf der rechten Seite). See Source code here
Schnelle Hilfe: "Eine einfache Möglichkeit, dieses Problem zu umgehen, besteht darin, " setDescendantFocusability (FOCUS_BLOCK_DESCENDANTS); " in den Listenansichten, so wie sie hinzugefügt werden Sie können Zeilen auswählen, auf Zeilen klicken und auf untergeordnete Kontrollkästchen und Schaltflächen klicken. " - Dies ist ein Zitat aus Kommentar # 27 auf der Seite, auf die zwei der Links in der obigen Antwort verweisen. Vielen Dank!! –
Link zu Workaround 1 ist unterbrochen. Kann jemand das bearbeiten? – Martze
nur der erste Link funktioniert die anderen sind kaputt bitte behoben, dass – BBdev
Zitiert Kommentar # 31 in Verbindung mit Samuh erwähnt (die das Problem für mich gelöst):
In der Tat Sie es in das Layout XML hinzufügen können (falls von einem aufgeblasen): android: demcendantFocusability = "blocksDescendants".
Hier JIC hinzufügen, dass die Webseite in der Zukunft nicht verfügbar ist.
Wenn ein Zeilenelement der Liste eine fokussierbare oder anklickbare Ansicht enthält, funktioniert OnItemClickListener
nicht.
Reihe Gegenstand muss param wie 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>
versucht, viele komplexe Lösungen werden mit, aber es war die einfachste, die funktioniert:
android: fokussierbarem = "false"
<CheckBox
android:id="@+id/fav_check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false" />
Zwei beste Lösung
- hinzufügen
android:descendantFocusability="beforeDescendants"
zur Listenansicht in xml ODER - Set gegeben zwei Attribute
false
wie
android:focusable="false"
android:focusableInTouchMode="false"
Dann wird es das Listview-Reihe Artikel Kind (Button Griff, EditText usw.) Ereignisse anstelle von listView.setOnItemClick.
Ich reparierte mein Problem anders, ich habe in meinem Artikel mehr als ein Linearlayout also, wenn Sie ID Ihre linearayout und setOnclickListener in Adapterklasse geben wird, nur ursprüngliche Wirkung der Berührung arbeiten verschwinden. aber dieser Link Making a LinearLayout act like an Button ist nützlich linearlaout wirken wie Taste auf Klick
Artikel
<?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>
innen getView Methode
@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;
}
Verlängert ListActivity statt Aktivität zu machen. Siehe http://www.softwarepassion.com/android-series-custom-listview-items-and-adapter/ –