1

我正嘗試使用兩個TextViews和一個CheckBox創建自定義ListView。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); 
      } 

     }); 

這是行不通的。 請告訴我我哪裏錯了。

+0

你在更新OnItemClickListener()中的checkBoxState [position]嗎? – sandrstar

回答

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

在list_item佈局中爲複選框組件添加上面的代碼。

希望它有幫助!,爲我工作。

您可以閱讀更多here

相關問題