使用自定义适配器在listview中将复选框设置为不可编辑

时间:2013-09-10 11:39:38

标签: android android-listview

我有自定义适配器的列表视图。列表视图中的每个项目都有一个imageview,textview和一个复选框。

我的要求是,如果特定项目中textview的值为“xyz”,我必须将该复选框设置为不可编辑(应始终选中该复选框,并且不允许用户取消选中该复选框) 。

我尝试过设置setClickable(false)setEnabled(false),但两者都没有用。请看下面的代码......

`

    @Override
    public View getView(final int position, View convertView, ViewGroup root) {
        View view = convertView;

        if (view == null)
            view = inflater.inflate(R.layout.item_favorite_list, null);

        view.setTag(teams.get(position).get("name"));


        ((TextView) view.findViewById(R.id.name)).setText(teams.get(
                position).get("name"));

        String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
        Log.d(Const.TAG, "Name = "+name);


        CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox);
        checkBox.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                CheckBox checkBox = (CheckBox) view;
                // do something here..
        });

        if (favoriteTeams.contains(teams.get(position).get("name")))
            checkBox.setChecked(true);
        else
            checkBox.setChecked(false);

                    //Need to set the checkBox to non-editable
        if(teams.get(position).get("name").equalsIgnoreCase("xyz"))
        {
            Log.d(Const.TAG, "Position = "+position);
            Log.d(Const.TAG, "Team = "+teams.get(position).get("name").toString());
            checkBox.setClickable(false);
            checkBox.setEnabled(false);
        }



        return view;
    }
}

`

3 个答案:

答案 0 :(得分:0)

你不需要onCheckedChangeListener吗?

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

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

   }
}

答案 1 :(得分:0)

你可以试试 checkBox.setOnClickListener(null);

答案 2 :(得分:0)

好的,所以这就是我做的..

` 
//if(teams.get(position).get("name").equalsIgnoreCase("xyz"))
            if(view.getTag().toString().equalsIgnoreCase("xyz"))
            {

                Log.d(Const.TAG, "View is Clickable = "+view.isClickable());    
                view.setBackgroundColor(Color.BLUE);
                checkBox.setClickable(false);
            }
            else
            {
                view.setClickable(false);
                view.setBackgroundColor(Color.WHITE);
                checkBox.setClickable(true);

            }
`

坦率地说,我不确定,如果这是最好的方法,但它确实有效。如果某人有更好的方法,请分享。