一个比较简单的方法就是给数据源的实体类里边加一个属性。代码:
Activity 里边
public class MainActivity extends Activity { ListView mListView; List<ItemDao>list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.mListView); list=new ArrayList<>(); for (int i=0;i<100;i++){//list添加100条数据 ItemDao dao = new ItemDao(); list.add(dao); } MyAdapter adapter = new MyAdapter(this); adapter.setList(list);//赋值给适配器 mListView.setAdapter(adapter); } }实体类,只有一个属性
public class ItemDao { public boolean isClicked() { return isClicked; } public void setIsClicked(boolean isClicked) { this.isClicked = isClicked; } boolean isClicked; }适配器
public class MyAdapter extends BaseAdapter { public MyAdapter(Context context) { this.context = context; } public void setList(List<ItemDao> list) { this.list = list; } List<ItemDao> list; Context 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 //这个方法说一下,当listView滚过一屏幕时就会重新调用getView()方法 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; // holder,在手机性能比较差的时候快了不是一点半点 if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.list_item_view, null); Button mButton = (Button) convertView.findViewById(R.id.mButton); holder = new ViewHolder(); holder.button = mButton; convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //这个地方很关键,不能在onClick里边写,重新调用getView的话,实例化一遍view,不走onclike,onclike设置的属性无效 // 通过isCliked属性判断 if (list.get(position).isClicked) { if (position < 10) { holder.button.setText("position :" + "0" + position + " 已赞"); } else { holder.button.setText("position :" + position + " 已赞"); } holder.button.setBackgroundColor(context.getResources().getColor(R.color.clicked)); } else { if (position < 10) { holder.button.setText("position :" + "0" + position + " 点赞"); } else { holder.button.setText("position :" + position + " 点赞"); } holder.button.setBackgroundColor(context.getResources().getColor(R.color.unClicked)); } holder.button.setOnClickListener(new MyListener(position)); return convertView; } class ViewHolder { Button button; } class MyListener implements View.OnClickListener { public MyListener(int i) { this.i = i; } int i; @Override public void onClick(View v) { if (list.get(i).isClicked) { list.get(i).setIsClicked(false); } else { list.get(i).setIsClicked(true); } notifyDataSetChanged();//刷新适配器,重新调用getview,不然点击不能改变view } } }