困惑与getview android imagebuttons

时间:2017-04-09 03:59:27

标签: android listview

我有一个listview,其中有两个图像按钮。点击图像按钮可更改背景颜色。当我点击第一个列表项,图像按钮背景改变并保存视图但滚动列表视图的底部时,另一个列表项的图像按钮的背景颜色也会改变。下面是自定义适配器的getView。我该如何避免这个问题?

public View getView(final int i, View view, ViewGroup viewGroup) {
    ViewHolder holder = new ViewHolder();
    holder = null;

    //view=null;
    if (inflater == null) {
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }
    if (view == null) {
        view = inflater.inflate(R.layout.student_list, null);

        holder = new ViewHolder();

        holder.presentButton = (ImageButton) view.findViewById(R.id.imageView);
        holder.absentButton = (ImageButton) view.findViewById(R.id.imageView2);
        holder.presentButton.setBackgroundColor(0);
        holder.absentButton.setBackgroundColor(0);


        view.setTag(holder);

    }
    else {
        holder = (ViewHolder) view.getTag();

    }

    final SQLiteStudents db1 = new SQLiteStudents(activity.getApplicationContext());
    final TextView tvName = (TextView) view.findViewById(R.id.tv_name);
    final TextView tvRoll = (TextView) view.findViewById(R.id.tv_roll);
    final studentInfo s = students.get(i);
    tvRoll.setText(s.getRoll() + ".");
    tvName.setText(s.getName());
    final Integer roll = Integer.parseInt(s.getRoll());
    //ivpresent.setBackgroundColor(0);
    final ViewHolder finalHolder1 = holder;
    //final ViewHolder finalHolder = holder;
    holder.presentButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            db1.updateUser(roll,"present");


            finalHolder1.presentButton.setBackgroundColor(GREEN);
            finalHolder1.absentButton.setBackgroundColor(0);
            //v1.setTag(v.getTag());
            //Log.d("present","Roll No: "+String.valueOf(roll));
            finalHolder1.presentButton.setTag(Integer.toString(i));
            notifyDataSetChanged();

        }
    });
    holder.absentButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            db1.updateUser(roll,"absent");
            finalHolder1.presentButton.setBackgroundColor(0);
            finalHolder1.absentButton.setBackgroundColor(RED);
            //view=null;
            //Log.d("absent","Roll No: "+String.valueOf(roll));
            finalHolder1.presentButton.setTag(Integer.toString(i));
            notifyDataSetChanged();
        }
    });


    return view;

}
public static class ViewHolder {
    public ImageButton presentButton;
    public ImageButton absentButton;
}

1 个答案:

答案 0 :(得分:0)

  public class CustomListAdapter extends BaseAdapter {
    private Activity activity;
    private LayoutInflater inflater;
    private List<studentInfo> students;
    private boolean presentButton = false;
    private boolean absentButton = false;
  

您需要在代码中相应地添加其他内容,请参阅以下内容:

public View getView(final int i, View view, ViewGroup viewGroup) {
    ViewHolder holder = new ViewHolder();
    holder = null;

    //view=null;
    if (inflater == null) {
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }
    if (view == null) {
        view = inflater.inflate(R.layout.student_list, null);

        holder = new ViewHolder();

        holder.presentButton = (ImageButton) view.findViewById(R.id.imageView);
        holder.absentButton = (ImageButton) view.findViewById(R.id.imageView2);
        holder.presentButton.setBackgroundColor(0);
        holder.absentButton.setBackgroundColor(0);


        view.setTag(holder);

    }
    else {
        holder = (ViewHolder) view.getTag();

    }

    final SQLiteStudents db1 = new SQLiteStudents(activity.getApplicationContext());
    final TextView tvName = (TextView) view.findViewById(R.id.tv_name);
    final TextView tvRoll = (TextView) view.findViewById(R.id.tv_roll);
    final studentInfo s = students.get(i);
    tvRoll.setText(s.getRoll() + ".");
    tvName.setText(s.getName());
    final Integer roll = Integer.parseInt(s.getRoll());
    //ivpresent.setBackgroundColor(0);
    final ViewHolder finalHolder1 = holder;
    //final ViewHolder finalHolder = holder;
    holder.presentButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            db1.updateUser(roll,"present");
            presentButton = true;
        }
    });
    holder.absentButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            db1.updateUser(roll,"absent");
            absentButton = true;

        }
    });

   if(presentButton){
    finalHolder1.presentButton.setBackgroundColor(GREEN);
            finalHolder1.absentButton.setBackgroundColor(0);
            //v1.setTag(v.getTag());
            //Log.d("present","Roll No: "+String.valueOf(roll));
            finalHolder1.presentButton.setTag(Integer.toString(i));
            notifyDataSetChanged();
   } else {
    //set button to some default button like black
   }

   if(absentButton){
    finalHolder1.presentButton.setBackgroundColor(0);
            finalHolder1.absentButton.setBackgroundColor(RED);
            //view=null;
            //Log.d("absent","Roll No: "+String.valueOf(roll));
            finalHolder1.presentButton.setTag(Integer.toString(i));
            notifyDataSetChanged();
   } else {
    //set button to some default button like black
   }


    return view;

}