如何在自定义适配器中维护列表视图的行中的更改?

时间:2018-07-09 17:59:18

标签: android-studio listview onclick custom-adapter

我有这个应用程序,我想在自定义适配器中的某些文本视图上保持点击行为(更改文本颜色),但是当我在列表视图中添加另一行时,更改的颜色消失了!有关我在说什么的更多信息,请参见下面的代码(感谢您的任何提前帮助):

public View getView(int position, View row, ViewGroup parent) {
    itemHolder holder = null;


    if (row == null) {
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new itemHolder();

        holder.txtNewWord = row.findViewById(R.id.tv_guess_word);
        holder.txtRightLetters = row.findViewById(R.id.tv_num_right_letters);
        holder.txtRightPlace = row.findViewById(R.id.tv_num_right_place);

        holder.txtLetter1 = row.findViewById(R.id.tv_letter1);
        holder.txtLetter2 = row.findViewById(R.id.tv_letter2);
        holder.txtLetter3 = row.findViewById(R.id.tv_letter3);
        holder.txtLetter4 = row.findViewById(R.id.tv_letter4);
        holder.txtLetter5 = row.findViewById(R.id.tv_letter5);


        row.setTag(holder);
    } else {
        holder = (itemHolder) row.getTag();
    }
    Word_Items newWordRow = words.get(position);

    holder.txtNewWord.setText(newWordRow.getNewWord());
    holder.txtRightLetters.setText(newWordRow.getRightLetters());
    holder.txtRightPlace.setText(newWordRow.getRightPlace());

    holder.txtLetter1.setText(newWordRow.getLetter1());
    holder.txtLetter2.setText(newWordRow.getLetter2());
    holder.txtLetter3.setText(newWordRow.getLetter3());
    holder.txtLetter4.setText(newWordRow.getLetter4());
    holder.txtLetter5.setText(newWordRow.getLetter5());

//在项目上单击

    final itemHolder finalHolder = holder;
    holder.txtLetter1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            clicks1++;
            switch (clicks1) {
                case 1:
                    finalHolder.txtLetter1.setTextColor(Color.RED);
                    break;
                case 2:
                    finalHolder.txtLetter1.setTextColor(Color.GREEN);
                    break;
                case 3: {
                    finalHolder.txtLetter1.setTextColor(Color.BLACK);
                    clicks1 = 0;
                }
                break;
            }
        }
    });
    holder.txtLetter2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            clicks2++;
            switch (clicks2) {
                case 1:
                    finalHolder.txtLetter2.setTextColor(Color.RED);
                    break;
                case 2:
                    finalHolder.txtLetter2.setTextColor(Color.GREEN);
                    break;
                case 3: {
                    finalHolder.txtLetter2.setTextColor(Color.BLACK);
                    clicks2 = 0;
                }
                break;
            }
        }
    });
    holder.txtLetter3.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            clicks3++;
            switch (clicks3) {
                case 1:
                    finalHolder.txtLetter3.setTextColor(Color.RED);
                    break;
                case 2:
                    finalHolder.txtLetter3.setTextColor(Color.GREEN);
                    break;
                case 3: {
                    finalHolder.txtLetter3.setTextColor(Color.BLACK);
                    clicks3 = 0;
                }
                break;
            }
        }
    });
    holder.txtLetter4.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            clicks4++;
            switch (clicks4) {
                case 1:
                    finalHolder.txtLetter4.setTextColor(Color.RED);
                    break;
                case 2:
                    finalHolder.txtLetter4.setTextColor(Color.GREEN);
                    break;
                case 3: {
                    finalHolder.txtLetter4.setTextColor(Color.BLACK);
                    clicks4 = 0;
                }
                break;
            }
        }
    });
    holder.txtLetter5.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            clicks5++;
            switch (clicks5) {
                case 1:
                    finalHolder.txtLetter5.setTextColor(Color.RED);
                    break;
                case 2:
                    finalHolder.txtLetter5.setTextColor(Color.GREEN);
                    break;
                case 3: {
                    finalHolder.txtLetter5.setTextColor(Color.BLACK);
                    clicks5 = 0;
                }
                break;
            }
        }
    });

    return row;
}

如您所见,我想通过单击列表视图的行项目来更改和保存文本视图的颜色更改,但是正如预期的那样,通过再添加一行它不保存值! 我该怎么办?

0 个答案:

没有答案