ListViewActivity.java
import java.util.ArrayList;
import java.util.List;
import com.example.entity.Bean;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
public class ListViewActivityextends ListActivity/* implements onViewClick */ {
private MyAdapteradapter;
private List<Bean>list;
@Override
protectedvoid onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
list = new ArrayList<Bean>();
for (inti = 0;i < 100;i++) {
Bean bean =new Bean();
bean.id =i;
bean.name ="张三";
bean.age = 10 +"" +i;
list.add(bean);
}
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
// android.R.layout.simple_list_item_1, list);
adapter =new MyAdapter(this,list);
setListAdapter(adapter);
/**
* 通过实现自定义监听器实现点击
*/
// adapter.setOnViewClick(new onViewClick() {
// @Override
// public voidonclick(View convertView,int index) {
// list.set(index, "jjkfsjks");
// // list.add(index, "jjkfsjks");
// adapter.notifyDataSetChanged();
// }
// });
}
/**
* 通过实现自定义监听器实现点击
*/
@Override
protectedvoid onListItemClick(ListViewl, Viewv, int position, long id) {
super.onListItemClick(l,v,position,id);
adapter.put(position, !adapter.get(position));//调用put设置状态
adapter.update(getListView(),position);//调用update更新
Toast.makeText(this,position +"", Toast.LENGTH_LONG).show();
}
// @Override
// public voidonclick(View convertView,int index) {
//
// }
}
MyAdapter.java 自定义接口调用
package com.example.aaaa;
import java.util.List;
import com.example.entity.Bean;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.util.ArrayMap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MyAdapterextends BaseAdapter {
private Contextcontext;
private List<Bean>list;
private LayoutInflaterinflater;
public ArrayMap<Integer, Boolean>isChecked;//纪录点击状态,解决错位的问题
public MyAdapter(Contextcontext, List<Bean>list) {
this.list =list;
this.context =context;
inflater = LayoutInflater.from(context);
init();
}
@SuppressLint("NewApi")
private void init() {//初始化item状态
isChecked =new ArrayMap<Integer, Boolean>();
for (inti = 0;i <list.size();i++) {
isChecked.put(i,false);
}
}
@SuppressLint("NewApi")
public void put(Integer key, Boolean value) {//设置item状态
isChecked.put(key,value);
}
@SuppressLint("NewApi")
public boolean get(Integer key) {//获取itme状态
return isChecked.get(key);
}
@Override
public int getCount() {
return (list ==null ||list.isEmpty()) ? 0 :list.size();
}
@Override
public Bean getItem(intposition) {
return list.get(position);
}
@Override
public long getItemId(int position) {
returnposition;
}
@Override
public View getView(finalintposition, ViewconvertView, ViewGroupparent) {
final ViewHolderholder;
if (convertView ==null) {
// convertView=inflater.inflate(R.layout.test, parent,false);
convertView =new TextView(context);
holder = new ViewHolder();
holder.tv = (TextView)convertView;
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
/**
* 自定义监听在activity中实现刷新
*/
// holder.tv.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// if (click != null) {
// click.onclick(holder.tv, position);
// }
// }
// });
Bean item = getItem(position);
if (get(position)) {//根据状态设置view数据
holder.tv.setText(item.name +"刷新" + position);
holder.tv.setBackgroundColor(Color.WHITE);
} else {
holder.tv.setText(item.name);
holder.tv.setBackgroundColor(Color.GRAY);
}
returnconvertView;
}
/**
* 调用adapter的getView
*
* @param listView
* @param position
*/
public void update(ListView listView, int position) {
if (listView !=null) {
int start = listView.getFirstVisiblePosition();//获取第一个显示的索引First Visible Position
int last = listView.getLastVisiblePosition();//获取最后一个显示的索引Last Visible Position
for (inti =start;i <=last; i++)
if (/* position==i *//* or */getItem(position) ==listView.getItemAtPosition(i)) {//可以通过索引和对象比较
View view =listView.getChildAt(i -start);
getView(i,view,listView);
break;
}
}
}
privatestaticclass ViewHolder {
TextView tv;
}
public onViewClickclick;
public void setOnViewClick(onViewClick click) {
this.click =click;
}
public interface onViewClick {
void onclick(ViewconvertView,intindex);
}
}
源码地址http://download.csdn.net/detail/u010945409/9524479
github地址:https://github.com/xieyuhai/ListView-Refresh-Two