/**
* tip : 深度研究listview (ListView如何单独刷新一个item)
*/
public class ListViewStudyActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {
private ListView lv;
public final String TAG = getClass().getSimpleName();
private StudyNotifyAdapter adapter;
private ArrayList<BeanTest> mData;
private BeanTest beanTest;
private TextView tv_footer_tv;
private ImageView footer_img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_study);
setUpView();
setData();
setListener();
}
private void setListener() {
lv.setOnItemClickListener(this);
}
private void setUpView() {
lv = (ListView) findViewById(R.id.lv);
View listview_footer = LayoutInflater.from(this).inflate(R.layout.listview_footer, null);
tv_footer_tv = (TextView) listview_footer.findViewById(R.id.tv_footer_tv);
lv.addFooterView(listview_footer);
}
private void setData() {
mData = new ArrayList<BeanTest>();
for (int i = 0; i < 20; i++) {
mData.add(new BeanTest("item", R.drawable.ic_launcher));
beanTest = new BeanTest();
beanTest.setName("item");
beanTest.setIcon(R.drawable.ic_launcher);
beanTest.setId(i);
mData.add(beanTest);
}
adapter = new StudyNotifyAdapter(this, mData);
adapter.setListView(lv);
lv.setAdapter(adapter);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (adapter != null) {
if (position == mData.size()) {
//插入一条数据
adapter.addData(new BeanTest("我是添加的item", R.drawable.icon_default_empty));
} else {
//点击事件
Toast.makeText(this, "您点击了:" + position, Toast.LENGTH_LONG).show();
Log.i(TAG, "position:========" + position);
Log.i(TAG, "id:========" + id);
Log.i(TAG, "view:========" + view);
// 获取listview 点击item 的数据
BeanTest itemAtBean = (BeanTest) parent.getItemAtPosition(position);
Log.i("点击item文字:", itemAtBean.getName() + "======" + itemAtBean.getId());
Log.i("点击item图片:", itemAtBean.getIcon() + "======" + itemAtBean.getId());
}
//更新数据
itemAtBean.setData(new BeanTest("我是局部刷新出的数据;", R.drawable.icon_default_empty));
itemAtBean.setName("是局部刷新出的数据");
itemAtBean.setIcon(R.drawable.icon_default_empty);
//刷新界面
adapter.updateItemData(itemAtBean);
} else {
return;
}
}
}
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Administrator on 2017/1/19 0019.
*/
public class StudyNotifyAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<BeanTest> mList;
private ListView listView;
private ImageView myTv;
private BeanTest bean;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
updateItem(msg.arg1);
}
};
/**
* tip : 刷新指定item
* @param index item 在listview 位置
*/
private void updateItem(int index) {
if (listView == null) {
return;
}
//获取第一个可以看到的item 位置
int firstVisiblePosition = listView.getFirstVisiblePosition();
//获取点击更新的view
if (index - firstVisiblePosition >= 0) {
View view = listView.getChildAt(index - firstVisiblePosition);
ViewHolder tag = (ViewHolder) view.getTag();
TextView tv_item = (TextView) view.findViewById(R.id.tv_item);
ImageView img = (ImageView) view.findViewById(R.id.img);
//重新设置页面 刷新数据
// BeanTest beanNotify = (BeanTest) getItem(index);
setData(index,tag);
// tv_item.setText(beanNotify.getName());
// img.setImageResource(beanNotify.getIcon());
}
}
public StudyNotifyAdapter(ListViewStudyActivity listViewStudyActivity, ArrayList<BeanTest> mData) {
this.mContext = listViewStudyActivity;
this.mList = mData;
}
/**
* tip ;整体刷新
* @param str
*/
public void addData(BeanTest str) {
mList.add(str);
notifyDataSetChanged();
}
/**
* tip :局部刷新item
* @param itemAtBean 新数据对象
*/
public void updateItemData(BeanTest itemAtBean) {
Message message = Message.obtain();
int tagId = -1;
//进行数据对比获取对应数据在listview中的位置
for (int i = 0; i < mList.size(); i++) {
if (mList.get(i).getId() == itemAtBean.getId()) {
tagId = i;
}
}
message.arg1 = tagId;
//更新mList对应位置的数据
mList.set(tagId, itemAtBean);
//刷新界面
mHandler.sendMessage(message);
}
public void setListView(ListView lv) {
this.listView = lv;
}
@Override
public int getCount() {
return mList == null ? 0 : mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_item, null);
holder.tv_item = (TextView) convertView.findViewById(R.id.tv_item);
holder.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
setData(position, holder);
return convertView;
}
private void setData(int position, ViewHolder holder) {
bean = mList.get(position);
holder.tv_item.setText(bean.getName());
if (position == bean.getId()){
holder.img.setImageResource(bean.getIcon());
}else {
holder.img.setImageResource(bean.getIcon());
}
Log.i("TAG", "position:" + position);
}
public class ViewHolder {
private TextView tv_item;
private ImageView img;
}
}