在listview中使用holder for textview

时间:2017-11-03 09:43:13

标签: android listview textview android-adapter baseadapter

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

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

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"));

            }
        });

2 个答案:

答案 0 :(得分:3)

您需要处理适配器内部的点击,而不是每次点击都会设置适配器。它必须如下所示:

#include <iostream>
#define N_INPUT 100
#define THE_ANSWER 42

using namespace std;

int main()
{
   int array[N_INPUT], i, input, count=0;
   bool universeAnswered = false;
   for (i = 0; i < N_INPUT; i++) {
      cin >> input;
      if (!universeAnswered)
      {
         if (input == THE_ANSWER) {
            universeAnswered = true;
         } else {
            array[count] = input;
            count++;
         }
      }
   }
   for (i = 0; i < count; i++) {
      cout << array[i] << endl;
   }
}

答案 1 :(得分:1)

首先在创建持有者之前对您的布局进行充气。 然后,您需要通过实现onclicklistener来定义onclick行为。我更新了你的getView方法,请按如下方式实现:

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

        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;
convertView.setOnClickListener(
             //you can do your job here what u want to do by clicking specific row
        );
    return convertView;
}

还要在评论中我在上面提到的块中编写您的功能。