2012-10-13 26 views
11

Próbuję wykonać wiele prób wyboru kontaktów dla mojej aplikacji. Używam niestandardowego układu z polem wyboru, aby wybrać wiele kontaktów. Problem, z którym się borykam, polega na tym, że aby wybrać konkretny kontakt, muszę kliknąć dokładnie na polu wyboru, jeśli kliknę na inną część wiersza, pole wyboru nie zostanie zaznaczone. Jak mogę upewnić się, że gdziekolwiek użytkownik kliknie w całym wierszu pole wyboru zostanie zaznaczone.jak zrobić kliknięcie całego wiersza widoku listy?

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

Odpowiedz

11

Spróbuj dodać ten atrybut do ListView

androida: klikalne = „true”

Również nie widzę dokąd Touch Setting/Kliknij słuchacza do myListView.

1

Dodam słuchacza kliknięć do pola tekstowego i jeśli kliknięciu zmienić stan pola wyboru do stanu przeciwnego (kliknięciu < -> unclicked)

1

pierwsze można użyć CheckedTextView zamiast wyboru. Może tylko ta praca.

lub

Spróbuj ustawić CheckBox aktywowana = „false”, jeśli nie działają następnie aktywowana we wszystkich Widok z układu XML.

6

Spróbuj zmienić szerokość układ pole do wypełnienia rodzica następująco,

android:layout_width="fill_parent" 

Guess będzie pracować dla ciebie :)

0

jeśli używasz przycisku/checkbox/RadioButton pozycji na liście, a następnie lista element nie jest klikalny

Możesz rozwiązać swój problem przez click here