2012-03-06 9 views
2

ListViewでgetViewに深刻な問題があります。問題は、各行にCheckBoxesがあることです。 ListViewはTabHostの一部であり、どのCheckBoxがチェックされているかを覚えておき、他のタブで使用する必要があります。ListViewのAdapterでの位置を見つける際の問題

しかし、リストビュー内のすべてのチェックボックスをチェックする「マスターチェックボックス」もあります。大したことはありませんが、問題は、CheckBoxのすべての状態を保持しているArrayListのCheckBoxの状態を変更するためにクリックした場所がわかりません。私がリスナーを各ビューに割り当てるたびに、引数としての "int position"は、私が必要とするものではなく、間違いなく数を与えます。アダプタの位置は、 "画面上の位置"ここで

は、コードは次のとおりです。すべての答えを

public View getView(int position, View convertView, ViewGroup parent) { 
     count = position; 
     View rowView = convertView; 
     SingleCarView sView = null; 

     if (rowView == null) { 
      LayoutInflater inflater = activity.getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.activity_overview_listview_row, null); 
      sView = new SingleCarView(); 

      sView.cbx = (CheckBox)rowView.findViewById(R.id.overview_listview_chckbox); 
      sView.carName = (TextView)rowView.findViewById(R.id.overview_listview_label); 
      sView.state = (ImageView)rowView.findViewById(R.id.overview_listview_icon); 
      rowView.setTag(sView); 
     } else { 
      sView = (SingleCarView) rowView.getTag(); 
     } 
     // THE TROUBLE BEGINS HERE... 
     sView.cbx.setChecked(savedState.get(position)); 
     sView.cbx.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(computerActionWithCheckBox) { 
        // nothing 
       } else { 
        if(allCars.isChecked()) { 
         savedState.set(count, isChecked); 
         userModifiedCheckBox = true; 
         allCars.setChecked(false); 

         adapter.notifyDataSetChanged(); 
        } else { 
         savedState.set(count, isChecked); 
        } 
       } 
      } 
     }); 
     sView.carName.setText(objects.get(position)); 
     switch(DataLoaderBeta.par.carState.get(position)){ 
     case 1: 
      sView.state.setImageResource(R.drawable.ic_moving); 
      break; 
     case 2: 
      sView.state.setImageResource(R.drawable.ic_out_of_signal); 
      break; 
     case 0: 
      sView.state.setImageResource(R.drawable.ic_parked); 
      break; 
     } 
     return rowView; 
    } 

おかげでたくさん! :-)あなたがgetView()メソッドから取得する位置を表すあなたのCheckBoxのタグと整数として設定getView()方法で

答えて

4

OnCheckedChangeListenerあなたがクリックされたチェックボックスを取得し、その後で
sView.cbx.setTag(new Integer(position)); 

buttonViewパラメータ、およびこのボタンからタグgetTag()を取得し、savedStateに位置するためにその番号を使用します。

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      Integer realPosition = (Integer) buttonView.getTag(); //realPosition will be the real position you get in the getView() method 
//other stuff here 
+0

ブリリアント、Pの作品間違いなくどうもありがとうございました! – Michal

関連する問題