wie machen gesamte Zeile der Listen-Ansicht anklickbar?
Ich versuche, mehrere Kontakt-picker für meine Anwendung. Ich bin mit einem benutzerdefinierten layout-mit checkbox zum auswählen mehrerer Kontaktieren. Das problem, das ich konfrontiert ist, dass, um zum auswählen eines bestimmten Kontakt, den ich klicken muss genau auf die checkbox, wenn ich auf den anderen Teil der Zeile die checkbox nicht angekreuzt. Wie kann ich sicherstellen, dass dort, wo der Benutzer klickt in die gesamte Reihe (das Kontrollkästchen wird mit einem Häkchen gekennzeichnet.
activity_contacts_picker.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/btnShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Selected" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btnShow" >
</ListView>
</RelativeLayout>
custcontactview.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="5.0px"
android:paddingLeft="5.0px"
android:paddingTop="5.0px" >
<TextView
android:id="@+id/txtContactName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15.0dip"
android:layout_toLeftOf="@+id/checkBox1"
android:layout_alignParentLeft="true"
android:text="Medium Text"
android:textAppearance="?android:textAppearanceMedium" />
<TextView
android:id="@+id/txtContactNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtContactName"
android:layout_alignParentLeft="true"
android:layout_marginLeft="15.0dip"
android:layout_toLeftOf="@+id/checkBox1"
android:text="Small Text"
android:textAppearance="?android:textAppearanceSmall" />
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="false" />
</RelativeLayout>
ContactsPicker.java
public class ContactsPicker extends ListActivity {
protected Object mActionMode;
public int selectedItem = -1;
private Button btnShowContacts;
private ListView myListView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts_picker);
myListView = getListView();
btnShowContacts = (Button) findViewById(R.id.btnShow);
btnShowContacts.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Button Clicked",
Toast.LENGTH_SHORT).show();
String name = null;
String number = null;
long[] ids = myListView.getCheckedItemIds();
for (long id : ids) {
Cursor contact = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id + "" }, null);
while (contact.moveToNext()) {
name = contact.getString(contact
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
number = contact.getString(contact
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
Toast.makeText(getApplicationContext(),
"Name: " + name + "\n" + "Number: " + number,
Toast.LENGTH_LONG).show();
}
}
});
ArrayList<Map<String, String>> list = buildData();
String[] from = { "Name", "Phone" };
int[] to = { R.id.txtContactName, R.id.txtContactNumber };
SimpleAdapter adapter = new SimpleAdapter(this, list,
R.layout.custcontactview, from, to);
setListAdapter(adapter);
}
private ArrayList<Map<String, String>> buildData() {
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
list.clear();
Cursor people = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null,
"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
while (people.moveToNext()) {
String contactName = people.getString(people
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String contactId = people.getString(people
.getColumnIndex(ContactsContract.Contacts._ID));
String hasPhone = people
.getString(people
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if ((Integer.parseInt(hasPhone) > 0)) {
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId,
null,
"UPPER(" + ContactsContract.Contacts.DISPLAY_NAME
+ ") ASC");
while (phones.moveToNext()) {
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Map<String, String> NamePhoneType = new HashMap<String, String>();
NamePhoneType.put("Name", contactName);
NamePhoneType.put("Phone", phoneNumber);
list.add(NamePhoneType);
}
phones.close();
}
}
people.close();
//startManagingCursor(people);
return list;
}
}
InformationsquelleAutor Tapan Desai | 2012-10-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dieses Attribut, um Ihre ListView -
android:clickable="true"
Auch, ich weiß nicht wo du die Einstellung Touch - /Klick-listener, um Ihre myListView.
Versuchen Sie die checkbox layout-Breite zu füllen, die Eltern wie folgt,
Denke, es wird für Sie arbeiten 🙂
Ich würde hinzufügen eine click-listener auf das textfield und wenn geklickt haben, ändern Sie den Status der Kontrollkästchen, um Ihren entgegengesetzten Zustand (Klick auf <-> unclicked)
Ersten, die Sie verwenden können CheckedTextView statt CheckBox. Vielleicht nur diese Arbeit.
oder
Versuchen CheckBox markieren justierbares="false", wenn das nicht funktioniert, dann justierbares in der Ansicht "alle" aus Ihrer XML-layout.
wenn Sie die Schaltfläche/checkbox/radiobutton auf Ihrer Liste Element Listen Element ist nicht anklickbar
können Sie Ihr problem lösen, indem klicken Sie hier