在ListView的选定项目中显示复选标记

时间:2018-08-25 13:59:01

标签: android listview getview

我正在尝试创建语言选择屏幕。我有一个public void rect(Canvas canvas) { int height = canvas.getHeight() / 2; int width = canvas.getWidth() / 2; rectF.set(width - 200, height - 200, width + 200, height + 200); canvas.drawRect(rectF, paint); } @Override public void onDraw(Canvas canvas) { randomShapeGenerator(canvas); } ,并且正在使用自定义适配器类。选择一个项目后,我想在该项目中显示一个勾号。我的ListView有一个ListView和一个TextView。如何实现?

这是我已经尝试过的。

ImageView

2 个答案:

答案 0 :(得分:1)

作为一种语言选择屏幕,我假设您一次只需要选择一项。您已经添加了布尔成员isChecked;,但似乎没有在任何地方使用它。


步骤1:

这里您需要一个int成员-例如,selectedItemPosition的初始值设置为-1。
换句话说,替换

boolean isChecked = false;

使用

int selectedItemPosition = -1;


步骤2:

将此添加到onItemClick()

selectedItemPosition = ((selectedItemPosition!=position)?position:-1);
notifyDataSetChanged();


步骤3:

将此添加到您的getView()

image_tick.setVisibility((selectedItemPosition=position)?View.VISIBLE:View.GONE);


一些提示:

  • 使用ListViewsfollow view holder pattern优化性能时。
  • 使用convertView来回收视图。
  • 您可以在XML中用image_tick.setImageResource(R.drawable.ic_checked);替换android:src="R.drawable.ic_checked"

答案 1 :(得分:0)

在点击的图像项中使用setVisibility(View.VISIBLE);!即:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView=  inflater.inflate(R.layout.content_lang_list,parent,false);

    TextView lang_text = (TextView) rowView.findViewById(R.id.text_select_lang);
    final ImageView image_tick = (ImageView) rowView.findViewById(R.id.image_tick);

    lang_text.setText(languages[position]);
    image_tick.setImageResource(R.drawable.ic_checked);
    image_tick.setVisibility(View.VISIBLE); //Show image
    return rowView;

}