2011-12-07 5 views
2

私はいくつかのToggleButton項目を持つリストビューを持っています。 1つをクリックすると、別のものがオン/オフになります。ただし、正しいListViewアイテムに関連するアクションを実行します。listViewアイテムの複数のToggleButton。 1つをクリックすると、他のものがオン/オフになります

public class AdapterContacts extends BaseAdapter implements OnClickListener { 

ToggleButton btnIsSending; 
    . 
    . 
    . 

    public View getView(int position, View convertView, ViewGroup viewGroup) { 
    Contact entry = contactsList.get(position); 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.contact_row, null); 
    } 
    . 
    . 
    . 
    // isSending button 
    btnIsSending = (ToggleButton) convertView.findViewById(R.id.btnIsSending); 
    btnIsSending.setFocusableInTouchMode(false); 
    btnIsSending.setFocusable(false); 
    btnIsSending.setOnClickListener(this); 
    btnIsSending.setTag(entry); 

    return convertView; 
} 

    public void onClick(View view) { 
    final Contact entry = (Contact) view.getTag(); 
    Log.d(TAG, "entry " + entry.getPhoneNr()); 

    LookalizeData lookData = (LookalizeApp.getContext()).lookalizeData; 
    // Toggle send button 
    if(view.getId() == btnIsSending.getId()){ 
     if(btnIsSending.isChecked()) 
      ... 
     else 
        ... 
     }  

は、他のボタンがあり、それらが正常に動作:彼らは、カスタムアダプタで管理されている

は、私はここに私のコードです。

共有することはできますか?で

答えて

3

getViewあなたが(このコードはあなたにそれがあなたのケースで動作するかのアイデア与えるある)このようなものを持っている:

ListView lv = ((ListActivity)context).getListView(); 
// Containing all check states 
SparseBooleanArray sba = lv.getCheckedItemPositions(); 

btnIsSending = (ToggleButton) convertView.findViewById(R.id.btnIsSending); 
btnIsSending.setFocusableInTouchMode(false); 
btnIsSending.setFocusable(false); 
btnIsSending.setTag(entry); 

btnIsSending.setChecked(false); 

// Cursor is passed as an argument. 
if(sba != null) 
    if(sba.get(cursor.getPosition())) 
    btnIsSending.setChecked(true); 

アクティビティ側で必要なものにこれを言いました。

xmlのandroid:choiceModeまたはsetChoiceModeを使用して、ListViewを複数選択モードにしました。

ボタンのリスナーを削除する必要があります。onClickonClickボタンで何をしていても、そのロジックをonListItemClickListActivtiyに追加する必要があります。

+0

あなたの答えをありがとう。私は実際にこのコードを取得せず、sparseBooleanArrayの使い方を知らない。私はこれを試してみる。一時的な修正として、独立したonClickListenerをトグルボタンに設定しました。 – znat

+0

私はそのトリッキーなことを知っています... – havexz

関連する問題