Android:取消选中所有CheckedTextView,但不选中其中一个 [英] Android: Un-select all CheckedTextView except present one

查看:651
本文介绍了Android:取消选中所有CheckedTextView,但不选中其中一个的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下代码选择ListView项(基于CheckedTextView)

i'm selecting the ListView items by using the bellow code (This is based on CheckedTextView)

 lvReport.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {

        rlAdapterReport = (RelativeLayout) view.findViewById(R.id.rl_lv_report_user);
        tvAdapterReportOption = (CheckedTextView) view.findViewById(R.id.tv_lv_report_user_title);

        if (tvAdapterReportOption.isChecked()) {
            //value = "un-Checked";
            tvAdapterReportOption.setCheckMarkDrawable(0);
            tvAdapterReportOption.setTextColor(Color.parseColor("#000000"));
            rlAdapterReport.setBackgroundColor(Color.parseColor("#FFFFFF"));
            tvAdapterReportOption.setChecked(false);
        } else {
            //value = "Checked";

            Drawable dr = getResources().getDrawable(R.drawable.report_tick_icon);
            Bitmap bitmap = ((BitmapDrawable) dr).getBitmap();
            Drawable finalDrawable = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, 50, 50, true));

            tvAdapterReportOption.setCheckMarkDrawable(finalDrawable);
            tvAdapterReportOption.setTextColor(Color.parseColor("#04CFE7"));
            rlAdapterReport.setBackgroundColor(Color.parseColor("#D5D5D5"));
            tvAdapterReportOption.setChecked(true);
        }
    }
});

通过使用上面的代码,我可以选择所有项目(为便于理解,请参见所附图像),但是我想一次选择一个项目.所以,我想取消选择所有已选择的项目

By using above code i'm able to select all items (For understanding see the attached image), but i want to select the single item at a time. So, i want to deselect the all items if already selected

修改

我的适配器(ArrayAdapter)getView代码

My adapter (ArrayAdapter) getView code

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;

final ReportUserItems rowItem = getItem(position);

LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null){
    convertView = mInflater.inflate(R.layout.lv_report_user_adapter, null);
    holder = new ViewHolder();

    holder.rlReport = (RelativeLayout) convertView.findViewById(R.id.rl_lv_report_user);
    holder.tvReportOption = (CheckedTextView) convertView.findViewById(R.id.tv_lv_report_user_title);

    convertView.setTag(holder);
}
else{
    holder = (ViewHolder) convertView.getTag();
}

return convertView;
}

推荐答案

在适配器类中,存储选定的行位置,并在用户单击其他项目时进行更新和刷新.

In your adapter class store the selected row position and update and refresh whenever user clicks on other item.

您的Adpater类更改.

Your Adpater class changes.

int selectedPosition = -1;  //to store only selected item position

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    final ReportUserItems rowItem = getItem(position);
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        //your code
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    //your other code 


    if (selectedPosition != -1)
        if (selectedPosition == position) {
            //your drawable code
            holder.tvReportOption.setCheckMarkDrawable(finalDrawable);
            holder.tvReportOption.setChecked(true);
            //your other stuff : changing color etc
        } else {
            holder.tvReportOption.setCheckMarkDrawable(0);
            holder.tvReportOption.setChecked(false);
            //your other stuff : changing color etc
        }

    return convertView;
}

//create this method in Adapter class
public void setSelected(int pos) {
    selectedPosition = pos;  //change selected item position
    notifyDataSetChanged();  //refresh views
}

活动代码更改

lvReport.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        adapter.setSelected(position);
    }
});

这篇关于Android:取消选中所有CheckedTextView,但不选中其中一个的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆