2013-01-02 101 views
1

我有一個LinearLayout我在哪裏填充手機通訊錄到佈局,現在我把一個checkbox,我想實現多個選擇checkboxes,我想選擇多個聯繫人當我保存(點擊保存按鈕)的接觸應保存在我的另一個佈局安卓:列表視圖與複選框問題

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    android:id="@+id/profilelayout" > 

    <ImageView 
      android:id="@+id/photo" 
      android:layout_width="68dp" 
      android:layout_height="51dp" > 
    </ImageView> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="15dp" 
     android:textStyle="bold" 
     android:textColor="#000000"/> 

     <CheckBox 
      android:id="@+id/checkBox1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"   
      android:layout_gravity="right" 
      android:focusable="false"/> 

     <TextView android:id="@+id/contactno" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000000" 
     /> 
     <TextView android:id="@+id/emailId" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000000" 
     />  

</LinearLayout> 
</LinearLayout> 

任何建議,我怎麼能做到這一點,當我剛剛檢查checkbox一些其他行也越來越檢查如何避免這種情況。任何幫助表示讚賞。

+1

http://stackoverflow.com/a/7738854/726863 –

回答

2

使用此

public class PlanetsActivity extends Activity { 
    private ListView mainListView; 
    private Contact[] contact_read; 
    private Cursor mCursor; 
    private ArrayAdapter<Contact> listAdapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Find the ListView resource. 
    mainListView = (ListView) findViewById(R.id.mainListView); 

    mainListView 
      .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View item, 
         int position, long id) { 
        Contact planet = listAdapter.getItem(position); 
        planet.toggleChecked(); 
        ContactViewHolder viewHolder = (ContactViewHolder) item 
          .getTag(); 
        viewHolder.getCheckBox().setChecked(planet.isChecked()); 
       } 
      }); 

    // Throw Query and fetch the contacts. 

    String[] projection = new String[] { Contacts.HAS_PHONE_NUMBER, 
      Contacts._ID, Contacts.DISPLAY_NAME }; 

    mCursor = managedQuery(Contacts.CONTENT_URI, projection, 
      Contacts.HAS_PHONE_NUMBER + "=?", new String[] { "1" }, 
      Contacts.DISPLAY_NAME); 

    if (mCursor != null) { 
     mCursor.moveToFirst(); 
     contact_read = new Contact[mCursor.getCount()]; 

     // Add Contacts to the Array 

     int j = 0; 
     do { 

      contact_read[j] = new Contact(mCursor.getString(mCursor 
        .getColumnIndex(Contacts.DISPLAY_NAME))); 
      j++; 
     } while (mCursor.moveToNext()); 

    } else { 
     System.out.println("Cursor is NULL"); 
    } 

    // Add Contact Class to the Arraylist 

    ArrayList<Contact> planetList = new ArrayList<Contact>(); 
    planetList.addAll(Arrays.asList(contact_read)); 

    // Set our custom array adapter as the ListView's adapter. 
    listAdapter = new ContactArrayAdapter(this, planetList); 
    mainListView.setAdapter(listAdapter); 
} 

    /** Holds Contact data. */ 
    @SuppressWarnings("unused") 
    private static class Contact { 
    private String name = ""; 
    private boolean checked = false; 

    public Contact() { 
    } 

    public Contact(String name) { 
     this.name = name; 
    } 

    public Contact(String name, boolean checked) { 
     this.name = name; 
     this.checked = checked; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public boolean isChecked() { 
     return checked; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 

    public String toString() { 
     return name; 
    } 

    public void toggleChecked() { 
     checked = !checked; 
    } 
} 

    /** Holds child views for one row. */ 
    @SuppressWarnings("unused") 
    private static class ContactViewHolder { 
    private CheckBox checkBox; 
    private TextView textView; 

    public ContactViewHolder() { 
    } 

    public ContactViewHolder(TextView textView, CheckBox checkBox) { 
     this.checkBox = checkBox; 
     this.textView = textView; 
    } 

    public CheckBox getCheckBox() { 
     return checkBox; 
    } 

    public void setCheckBox(CheckBox checkBox) { 
     this.checkBox = checkBox; 
    } 

    public TextView getTextView() { 
     return textView; 
    } 

    public void setTextView(TextView textView) { 
     this.textView = textView; 
    } 
} 

    /** Custom adapter for displaying an array of Contact objects. */ 
    private static class ContactArrayAdapter extends ArrayAdapter<Contact> { 

    private LayoutInflater inflater; 

    public ContactArrayAdapter(Context context, List<Contact> planetList) { 
     super(context, R.layout.simplerow, R.id.rowTextView, planetList); 
     // Cache the LayoutInflate to avoid asking for a new one each time. 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Contact to display 
     Contact planet = (Contact) this.getItem(position); 
     System.out.println(String.valueOf(position)); 

     // The child views in each row. 
     CheckBox checkBox; 
     TextView textView; 

     // Create a new row view 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.simplerow, null); 

      // Find the child views. 
      textView = (TextView) convertView 
        .findViewById(R.id.rowTextView); 
      checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01); 

      // Optimization: Tag the row with it's child views, so we don't 
      // have to 
      // call findViewById() later when we reuse the row. 
      convertView.setTag(new ContactViewHolder(textView, checkBox)); 

      // If CheckBox is toggled, update the Contact it is tagged with. 
      checkBox.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        CheckBox cb = (CheckBox) v; 
        Contact contact = (Contact) cb.getTag(); 
        contact.setChecked(cb.isChecked()); 
       } 
      }); 
     } 
     // Reuse existing row view 
     else { 
      // Because we use a ViewHolder, we avoid having to call 
      // findViewById(). 
      ContactViewHolder viewHolder = (ContactViewHolder) convertView 
        .getTag(); 
      checkBox = viewHolder.getCheckBox(); 
      textView = viewHolder.getTextView(); 
     } 

     // Tag the CheckBox with the Contact it is displaying, so that we 
     // can 
     // access the Contact in onClick() when the CheckBox is toggled. 
     checkBox.setTag(planet); 

     // Display Contact data 
     checkBox.setChecked(planet.isChecked()); 
     textView.setText(planet.getName()); 

     return convertView; 
    } 

    } 

    public Object onRetainNonConfigurationInstance() { 
     return contact_read; 
    } 
} 
+0

IAM alreading讓我接觸那些婉要保存在另一個佈局接觸 – teekib

2

將模型傳遞給您的Adapter

模型包含boolean isChecked;

onClickcheckbox使這個值model.setChecked(true);

現在,當您從型號列表中點擊保存得到的是真實的;

和顯示/執行動作,享受。