【问题标题】:Android Studio save drawableLeft icon on listview item clickAndroid Studio在listview项目上保存drawableLeft图标点击
【发布时间】:2018-06-19 13:10:18
【问题描述】:

我遇到了一个我无法解决的小问题,我搜索了网络,但找不到答案。我正在为我的手机制作一个小型 android 应用程序,并且我有一个 listview 项目,其中包含一些项目。单击我的 listView 中的某些项目时,我想在左侧显示一个小复选标记,以便用户可以看到他选择的内容。下次用户打开或进入该 Activity 时,应该已经有他上次单击的内容的复选标记。

我像这样设置 drawableLeft 图标,但现在我拥有的每个 listView 项目都有相同的复选标记。

public class BazaAdapter extends ArrayAdapter<bazeKlasa>
{
    private Context mContext;
    int mResource;


public BazaAdapter(@NonNull Context mContext, int resource, @NonNull 
ArrayList<bazeKlasa> objects) {
    super(mContext, resource, objects);
    this.mContext = mContext;
    this.mResource = resource;
}


@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull 
ViewGroup parent) {

    String imeBaze = getItem(position).getBaza();
    String nazivBaze = getItem(position).getImeBaze();

    bazeKlasa Baza = new bazeKlasa(imeBaze, nazivBaze);


    LayoutInflater inflater = LayoutInflater.from(mContext);
    convertView = inflater.inflate(mResource,parent,false);

    TextView TextGornji = (TextView) 
convertView.findViewById(R.id.lblcountryname);
    TextGornji.setText(nazivBaze);

    return convertView;
}
}

【问题讨论】:

  • 发布您的适配器代码
  • pop,这是我的适配器类。
  • 如何查看哪些有复选标记图标?还有一件事如果您只想为选定的项目设置复选标记,请以编程方式设置可绘制。

标签: android listview


【解决方案1】:

getView() 方法上,您需要根据您的签入以编程方式设置drawable,哪些项目有刻度线,哪些没有。

希望这会有所帮助。

    TextView TextGornji = (TextView) convertView.findViewById(R.id.lblcountryname);

    // Provide your condition here instead of isShow
    if (isShow) {
        Drawable img = mContext.getResources().getDrawable(R.drawable.tick); //Provide tick mark drawable
        img.setBounds(0, 0, 60, 60);
        TextGornji.setCompoundDrawables(img, null, null, null);
    } else {
        TextGornji.setCompoundDrawables(null, null, null, null);
    }

【讨论】:

    【解决方案2】:

    变量定义

      private int mSelectedItem = -1;
    

    和getView方法添加这段代码

     if(mSelectedItem==position)
            {
                holder.textview.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_right, 0,
                        0, 0);
            }
            else
            {
                holder.textview.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_blank, 0,0, 0);
            }
    

    点击事件添加此代码

      mSelectedItem = getAdapterPosition();
      notifyDataSetChanged();
    

    【讨论】:

    • Tnx,我现在就试试。你能告诉我你所说的“持有人”是什么意思吗?我希望这会有所帮助:)
    • holder 是一个 recyclerView 适配器方法对象,例如 ( public void onBindViewHolder(@NonNull final SizeViewHolder holder, int position) )
    • 到目前为止一切顺利,TextGornji.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_right, 0, 0, 0);但由于某种原因,“getAdapterPosition()”对我来说是红色的,我不知道该怎么做。为什么会发生这种情况?我应该改变什么吗?
    • 你被替换为 adapter.notifyDataSetChanged();
    • 并点击此链接对您有用.....stackoverflow.com/questions/12596199/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多