Android ListView 按钮文本颜色在从上到下滚动时发生变化?

标签 android android-listview

我有一个 ListView,我使用自定义适配器用 TextViewButton 填充了 ListView。我有在自定义适配器中为该 Button 生成了一个点击事件。在那个点击事件中,我试图更改按钮文本和颜色,到这里它工作正常但是当我滚动 ListView 上下其他 Button 的文字颜色在变化。我从过去几天就停在这里了......

这是我到目前为止尝试过的一些代码

@Override
    public View getView(final int position, View convertView, ViewGroup parent) 
    {
        View v=convertView;
        final ViewHolder holder;
        if(convertView ==null)
        {
            convertView = mInlfater.inflate(R.layout.attendancelistview,null);
            holder = new ViewHolder();
            holder.b1 = (Button)convertView.findViewById(R.id.row3);
            holder.tv1 = (TextView)convertView.findViewById(R.id.row1);
            holder.tv2 = (TextView)convertView.findViewById(R.id.row2);
            convertView.setTag(holder);
        }
        else
        {
            holder =(ViewHolder) convertView.getTag();
        }
        //List<StudentData> data = list.get(position).Rno;
        holder.tv1.setText(String.valueOf(list.get(position).Rno));
        holder.tv2.setText(list.get(position).StudentName);
        holder.b1.setText(list.get(position).Attendance);
        holder.b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v)
            {
                if(holder.b1.getText().equals("Present"))
                {
                    holder.b1.setText("Absent");
                    //list.get(position).put("Attendance", "Absent");

                    holder.b1.setTextColor(Color.RED);
                }
                else if(holder.b1.getText().equals("Absent"))
                {
                    holder.b1.setText("Present");
                    //list.get(position).put("Attendance", "Present");
                    holder.b1.setTextColor(Color.GREEN);
                }
                String rno1=  String.valueOf(holder.tv1.getText());
                name=String.valueOf(holder.tv2.getText());
            }

        });
        return convertView;
    }
    static class ViewHolder
    {
        Button b1;
        TextView tv1,tv2,tv3;
    }

最佳答案

如果 holder.b1 按钮文本发生变化,则原因是您没有正确处理 getView。

我想这会返回一些整数 id

list.get(position).Rno

例如,您需要将该 ID 存储在某个数组列表中

//Declare this outside of getView().   
 ArrayList<Integer> your_number = new ArrayList();

然后在你的按钮中点击

holder.b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v)
            {
                if(holder.b1.getText().equals("Present"))
                {
                    holder.b1.setText("Absent");
                    //list.get(position).put("Attendance", "Absent");

                    holder.b1.setTextColor(Color.RED);
your_number.add(list.get(position).Rno);
                }
                else if(holder.b1.getText().equals("Absent"))
                {
                    holder.b1.setText("Present");
                    //list.get(position).put("Attendance", "Present");
                    holder.b1.setTextColor(Color.GREEN);
your_number.remove(list.get(position).Rno);
                }
                String rno1=  String.valueOf(holder.tv1.getText());
                name=String.valueOf(holder.tv2.getText());
            }

        });

最后在你的 getView() 中

if (your_number.contains(list.get(position).Rno)){
//set your text
}else{
//Set your text
}

关于Android ListView 按钮文本颜色在从上到下滚动时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930717/

相关文章:

android - 奇怪的 ClassCastException : ImageView cannot be cast to ListView

android - android中ListView项目的边距

java - TextView 中的文本在滚动时淡出

android - Spinner 项目的自定义布局

android - 如何链接到特定的偏好组

android - 从其 ItemClickListener 的 ListView 中删除项目

android - ListView 中的 EditText 失去焦点

java - 当用户禁用 GPS 时如何在 MapActivity 上收到警报

jquery - 检索最后已知的地理位置 - Phonegap

android - 一个布局android中的多个 ListView