1

2 つの TextView と 1 つの CheckBox を持つカスタム ListView を作成しようとしています。

//define your custom adapter

public class Customadaptor extends ArrayAdapter<HashMap<String, Object>>
{
    public  ArrayList<HashMap<String, Object>> players;
   // boolean array for storing
   //the state of each CheckBox 
   boolean[] checkBoxState;
   static int i =0; 


   ViewHolder viewHolder;

   public Customadaptor(Context context, int textViewResourceId,ArrayList<HashMap<String, Object>> player) {

    //let android do the initializing :)
    super(context, textViewResourceId, player); 
    players = player;
  //create the boolean array with 
   //initial state as false
  checkBoxState=new boolean[player.size()];
  }

   String[] arr = {" "};
    //class for caching the views in a row  
 public class ViewHolder
 {
   TextView name,name2;
   CheckBox checkBox;
 } 

 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {

   if(convertView==null)
    {
       LayoutInflater inflater =LayoutInflater.from(getContext());
   convertView=inflater.inflate(R.layout.customlistview, null);
   viewHolder=new ViewHolder();

   viewHolder.name=(TextView) convertView.findViewById(R.id.name);
   viewHolder.team=(TextView) convertView.findViewById(R.id.name2);
   viewHolder.checkBox=(CheckBox) convertView.findViewById(R.id.checkBox);

    //link the cached views to the convertview
   convertView.setTag( viewHolder);

    }
   else
       viewHolder=(ViewHolder) convertView.getTag();


    //cache the views
    viewHolder.name=(TextView) convertView.findViewById(R.id.name);
    viewHolder.team=(TextView) convertView.findViewById(R.id.name2);
    viewHolder.checkBox=(CheckBox) convertView.findViewById(R.id.checkBox);

     //link the cached views to the convertview
    convertView.setTag( viewHolder);          
  viewHolder.name.setText(players.get(position).get("name").toString());
  viewHolder.team.setText(players.get(position).get("team").toString());

   //VITAL PART!!! Set the state of the 
   //CheckBox using the boolean array
        viewHolder.checkBox.setChecked(checkBoxState[position]);   
        viewHolder.checkBox.setOnClickListener(new View.OnClickListener() {

               public void onClick(View v) {
                if(((CheckBox)v).isChecked())
                 checkBoxState[position]=true;
                else
                 checkBoxState[position]=false;

                }
               });


   //return the view to be displayed
   return convertView;
  } 
 }

setOnItemClickListener()チェックボックスを切り替えるために使用しようとしています。コードは正常に動作しています。唯一の違いは、チェックボックスが切り替えられないことです。

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View item,
                    int position, long id) {    
                Log.v("Position",""+position);

                CheckBox checkBox = (CheckBox)item.findViewById(R.id.checkBox); 
                checkBox.toggle();
                Log.v("Position",""+position);
            }

        }); 

これは機能していません。どこが間違っているのか教えてください。

4

1 に答える 1

0
android:focusable="false"
android:focusableInTouchMode="false"

list_item レイアウトのチェックボックス コンポーネントに上記のコードを追加します。

それが役立つことを願っています!、私のために働いた.

詳しくはこちらをご覧ください

于 2012-10-26T14:53:06.270 に答える