2012-10-13 6 views
11

Ich versuche, mehrere Kontakte Picker für meine Anwendung zu machen. Ich verwende ein benutzerdefiniertes Layout mit Kontrollkästchen, um mehrere Kontakte auszuwählen. Das Problem, das mir gegenübersteht, ist, dass ich, um einen bestimmten Kontakt auszuwählen, genau auf das Kontrollkästchen klicken muss, wenn ich auf einen anderen Teil der Zeile klicke, wird das Kontrollkästchen nicht angekreuzt. Wie kann ich sicherstellen, dass das Kontrollkästchen aktiviert wird, wenn der Benutzer in der gesamten Zeile klickt.Wie macht man ganze Zeilen der Listenansicht anklickbar?

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

Antwort

11

Versuchen Sie dieses Attribut auf Ihre Listview Hinzufügen

android: anklickbare = „true“

Auch ich sehe nicht, wo Sie berühren bist Einstellung/Click Zuhörer auf Ihre MyListView.

1

würde ich einen Klick Zuhörer das Textfeld hinzufügen und wenn eine Änderung des Zustands der Checkbox in den entgegengesetzten Zustand geklickt (geklickt < -> unclicked)

1

Zuerst kann man CheckedTextView statt CheckBox verwenden. Vielleicht nur diese Arbeit. in aller Ansicht von XML-Layout

oder

Versuchen CheckBox fokussierbarem = "false" gesetzt, wenn nicht dann fokussierbarem arbeiten.

6

Versuchen Sie, die die Checkbox Layoutbreite Ändern Eltern zu füllen, wie folgt,

android:layout_width="fill_parent" 

Vermutung ist es für Sie arbeiten :)

0

, wenn Sie Taste/Checkbox/Radiobutton auf Ihrer Liste Artikel verwenden dann Liste Artikel ist nicht anklickbar

Sie Ihr Problem durch click here

lösen kann