2015-03-31 144 views
4

我有一个ListView其中checkbox显示在每一行。
每次碰到checkbox时,我都会检查它是否被检查。
但每一次,第一项总是返回false。但是,如果选中第二项,则第一项复选框的.ischecked()方法总是返回true
这里是我的代码Android checkbox.isChecked()无法正常工作

public class CustomSpecificCar extends ArrayAdapter<JSONObject>{ 
    ListSpecificCars caller; 
    private JSONObject currentJson; 
    private CheckBox cbSelectedCar; 
    private int position; 

    public CustomSpecificCar(Context ctxt, List<JSONObject> list, ListSpecificCars caller){ 
     super(ctxt, R.layout.custom_specific_car_row, list); 
     this.caller = caller; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     View customView = inflater.inflate(R.layout.custom_specific_car_row, parent, false); 
     this.position = position; 

     // Set the reference of the layout 
     currentJson      = getItem(this.position); 
     cbSelectedCar      = (CheckBox)customView.findViewById(R.id.cbSelectedCar); 
     TextView tvBrand     = (TextView)customView.findViewById(R.id.tvBrand); 
     TextView tvModel     = (TextView)customView.findViewById(R.id.tvModel); 
     TextView tvOwnerEditable   = (TextView)customView.findViewById(R.id.tvOwnerEditable); 
     TextView tvPriceEditable   = (TextView)customView.findViewById(R.id.tvEstimatedPriceEditable); 


     try { 
      tvBrand.setText(currentJson.getString("brand")); 
      tvModel.setText(currentJson.getString("model")); 
      tvOwnerEditable.setText(currentJson.getString("owner")); 
     } catch (JSONException e) { 
      Log.e(e.getClass().getName(), "JSONException", e); 
     } 

     cbSelectedCar.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
        if (cbSelectedCar.isChecked()){ 
         caller.updateClickedUsername(currentJson, true); // Add to the List 
         Log.d("Added click ", "ok"); 
        } 

        else if (!cbSelectedCar.isChecked()) { 
         caller.updateClickedUsername(currentJson, false); // Delete from the List 
         Log.d("Deleted click ", "nok"); 
        } 
     }}); 

     return customView; 
    } 

} 

我应该怎么做来解决这个问题? 非常感谢提前!

回答

13

您应该使用setOnCheckedChangeListener。

样品:

checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 

     } 
     }); 

在您的代码:

cbSelectedCar.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
       if (isChecked){ 
        caller.updateClickedUsername(currentJson, true); // Add to the List 
        Log.d("Added click ", "ok"); 
       } 

       else if (!isChecked) { 
        caller.updateClickedUsername(currentJson, false); // Delete from the List 
        Log.d("Deleted click ", "nok"); 
       } 

     } 
     }); 
+0

@Emmanuel赛博尔德:非常感谢,工作就像魅力! – Mornor 2015-03-31 08:19:07

+0

欢迎您。不要忘记upvote答案,然后其他人可以看到这是一个“解决方案” – 2015-03-31 08:19:37

+0

真棒兄弟! – 2017-07-08 21:21:39

-1

对于使用选中复选框作为Onclicklistener这将帮助你

CheckBox.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (((CheckBox) v).isChecked()) { 
       Toast.makeText(this, "CheckBox is checked", Toast.LENGTH_SHORT).show(); 
       } else { 
       Toast.makeText(this, "CheckBox is not checked", Toast.LENGTH_SHORT).show(); 
      } 
    });