2012-10-13 16 views
11

Sto cercando di rendere più selettore di contatti per la mia applicazione. Sto usando un layout personalizzato con la casella di controllo per selezionare più contatti. Il problema che sto affrontando è che per selezionare un contatto particolare ho bisogno di cliccare esattamente sulla casella, se clicco su un'altra parte della riga non viene spuntata la casella di controllo. Come posso assicurarmi che ovunque l'utente faccia clic sull'intera riga viene spuntata la casella di controllo.come rendere l'intera riga della visualizzazione elenco selezionabile?

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

risposta

11

Prova ad aggiungere questo attributo al vostro ListView

android: cliccabile = "true"

Inoltre, non vedo dove sta impostando touch/Clicca ascoltatore al vostro MyListView.

1

vorrei aggiungere un click ascoltatore al campo di testo e se cliccato il cambiamento dello stato della casella di controllo al suo stato opposto (cliccato < -> unclicked)

1

In primo luogo è possibile utilizzare CheckedTextView invece CheckBox. Forse solo questo lavoro.

o

Prova un gruppo di caselle attivabile = "false", se non funzionano poi attivabile in tutte le Vista dal layout XML.

6

provare a cambiare la larghezza del layout casella di controllo per riempire genitore come segue,

android:layout_width="fill_parent" 

Immagino che lavorerà per voi :)

0

se si utilizza il pulsante/casella di controllo/pulsante radio sul vostro articolo lista allora lista l'articolo non è selezionabile

è possibile risolvere il problema con click here

Problemi correlati