当前位置: 首页 > 知识库问答 >
问题:

ViewHolder图案-ListView-项目的背景色设置不正确

夏侯承恩
2023-03-14

我有一个带有自定义适配器的listview。listview中唯一的项目是TextView(目前)。当我点击文本视图时,背景颜色应变为蓝色,当我再次点击时,背景颜色应变为默认颜色(浅灰色)。我尝试使用ViewHolder模式来实现这一点。

现在的问题是,当我点击列表中的第一个项目时,一些随机项目的背景颜色会变成蓝色。

CustomAdapter类:

public class ResultsAdapter extends BaseAdapter {

    ViewHolder holder;

    @Override
    public int getCount() {
        return dummyText.length;
    }

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

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

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

        if (convertView == null) {
            convertView = getActivity().getLayoutInflater().inflate(
                    R.layout.item_mtf_results, parent, false);

            holder = new ViewHolder();
            holder.txtViewResults = (TextView) convertView
                    .findViewById(R.id.textview_item_mtf_results);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txtViewResults.setText(dummyText[position]);

        holder.txtViewResults.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Log.d(Const.DEBUG, "in onClick Method");
                Log.d(Const.DEBUG, "Is checked ? = " + holder.isChecked);

                String result = holder.txtViewResults.getText().toString();
                listener.onResultClick(result);

                if (holder.isChecked) {

                    Log.d(Const.DEBUG, "isChecked = true");

                    holder.txtViewResults.setBackgroundColor(getResources()
                            .getColor(R.color.light_grey));
                    holder.txtViewResults.setTextColor(getResources()
                            .getColor(R.color.black));
                    holder.isChecked = false;

                    Log.d(Const.DEBUG,
                            "Holder is set to false..  checked ? = "
                                    + holder.isChecked);

                } else {

                    Log.d(Const.DEBUG, "isChecked = false");

                    holder.txtViewResults.setBackgroundColor(getResources()
                            .getColor(R.color.blue));
                    holder.txtViewResults.setTextColor(getResources()
                            .getColor(R.color.white));
                    holder.isChecked = true;

                    Log.d(Const.DEBUG,
                            "Holder is set to true..  checked ? = "
                                    + holder.isChecked);
                }

            }
        });

        return convertView;
    }

}

持证人类别:

public static class ViewHolder {
    TextView txtViewResults;
    boolean isChecked = false;
}

如果您需要任何其他代码,请告诉我。。。

共有1个答案

须彭亮
2023-03-14

尝试在converview==null块内为文本视图添加clickListenr。每次滚动listview时都会设置Listners。

 类似资料:
  • 我有一个FragmentActivity,它可以包含用户想要的任意多个ListFragments。ListFragments在HorizontalScrollView中并排排列(在ActionBar中选择一个选项时)。每个ListFragment项都包含一个TextView和一个按钮。单击按钮可更改按钮的ViewParent(包含按钮和TextView的线性布局)的背景色。 现在,单击每个List

  • 我有一个列表视图。我想为listView项设置边框,所以我使用“Shape”XML。 shape_panel_drawable.xml文件 谢谢!

  • 问题内容: 我正在使用Nimbus外观。我需要在JTabbedPane中更改选项卡的背景色和前景色,但在JTabbedPane中未设置颜色。我尝试了setForeground(),setForegroundAt(),setBackground()和setBackgroundAt()方法,但没有用。这是我的代码 } 问题答案: 您可以执行几项不同的操作,具体取决于您希望对确切颜色进行多少控制。最简单

  • 通过RGB值设置背景的颜色。 默认的颜色是 0x000000: // 颜色的参数可以是字符串 "#530000" 或者是十六进制数值 0x530000 controller.setBackgroundColor("#530000); //controller.setBackgroundColor(0x530000);

  • 在JFreeChart中,我使用CategoryDataset和createLineChart生成图表。这看起来像这样: 请注意图表周围的灰色区域。我想把它换成透明的,或者至少是白色的,就像上面的旧的一样。 我试着这样做: 但它不起作用。 我如何将背景改为白色,并将情节的背景改为灰色(就像旧的一样?) 谢谢 我可以更新绘图的背景,但不能更新图表面板的背景。 这是有以下选项的图表: 在这里,我想用黄

  • 问题内容: 如何设置JFrame的背景颜色? 问题答案: 检索框架的内容窗格,并使用从继承的方法更改颜色。 例: