android - 在 ListView 中使用 holder 作为 textview

标签 android listview textview android-adapter baseadapter

我正在实现一个包含 2 个 TextViewsListView。第一个 TextView 是我从查询中填充的产品的名称。当我触摸 ListView 中的任何项目时,会出现一个 Dialog。当我确认 Dialog 时,我想将第二个 TextView 文本更改为字符串,但每当我这样做时,每秒 Textview 文本都会更改。例如,如果我在 ListView 中有 3 个项目,并且我单击第一个,则只有该项目的 TextView 应该更改,而不是所有三个。

这是我的基本适配器代码:

public class StrengthAdapter extends BaseAdapter {
    private ArrayList<Strengths> list;
    private LayoutInflater layoutInflater;
    private static HashMap<Integer, String> selectedStrengthsMap = new HashMap<Integer, String>();
    private String testing;

    public StrengthAdapter(Context context, ArrayList<Strengths> list, String test) {
        this.list = list;
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.testing = test;
        //HashMap<Integer, String> issuesStrengthsbrandNameIDMap = context
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null){
            viewHolder = new ViewHolder();
            //viewHolder.position = position;
            convertView = layoutInflater.inflate(R.layout.strengthslistview, null);
            viewHolder.strengthCheckBox = (TextView) convertView.findViewById(R.id.strengthsCheckBox);
            viewHolder.chip = convertView.findViewById(R.id.chip);

            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.strengthCheckBox.setText(((Strengths) list.get(position)).getStrength_title());
        viewHolder.chip.setText(testing);
        //viewHolder.position = position;
        return convertView;
    }

    public static HashMap<Integer, String> sendSelectedStrengthMap(){
        return selectedStrengthsMap;
    }

    static class ViewHolder {
        TextView strengthCheckBox;
        TextView chip;
        //int position;
    }
}

这是我最初设置适配器的方式:

strengthListView.setAdapter(new StrengthAdapter(StrengthOfDemandsView.this, strengthsList, "TEST"));

这就是我在关闭对话框后设置适配器的方式:

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                strengthListView.setAdapter(new StrengthAdapter(StrengthOfDemandsView.this, strengthsList, "TEST123"));

            }
        });

最佳答案

您需要在适配器内部处理点击,而不是在每次点击发生时都设置适配器。它必须看起来像这样:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView == null){
            viewHolder = new ViewHolder();
            //viewHolder.position = position;
            convertView = layoutInflater.inflate(R.layout.strengthslistview, null);
            viewHolder.strengthCheckBox = (TextView) convertView.findViewById(R.id.strengthsCheckBox);
            viewHolder.chip = convertView.findViewById(R.id.chip);

            convertView.setTag(viewHolder);
        }else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.strengthCheckBox.setText(((Strengths) list.get(position)).getStrength_title());
        convertView.setOnClickListener(
             // show dialog here and then in positiveButton callback call
             //viewHolder.chip.setText(testing);
        );
        return convertView;
    }

关于android - 在 ListView 中使用 holder 作为 textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47092599/

相关文章:

对话框中relativelayout的android布局

android - 检查设备是否可以调用电话

android - 在 list 中声明外部服务

android - RecyclerView ambiguos setVisibility函数,点击一个 View 影响多个 View

java - 无法从 AdapterView 转换为自定义适配器?

android - TextView 由于某种原因无法清除,Android

android - 媒体播放器 : How to update progress every second?

android - 如何在用户点击 ListView 项目后显示广告,但不是针对 Android 中的每个项目?

android - 我怎样才能拥有具有不同 TextView 和 Spinner 文本颜色的全局主题?

android - 在 Android 中将文本设置为 "primary"