ListView中響應item的點擊事件並且刷新界面


---恢復內容開始---

最近在在實現listview功能中遇到了這個問題:

點擊事件寫在了adapter的item中,不知道如何在listview的點擊事件中更新數據的顯示:

總結:1.要使用notifyDataSetChanged();刷新界面需要滿足setAdapter時傳入的存儲數據的對象是同一個,並且數據要發生改變;

(setAdapter時傳入的List集合中存儲bean對象,setadapter(this,List<Info> list),對bean對象的數據進行修改后,要進行更新界面需要list.clear(),list.addall(query());)

 
        

1.要實現的功能:點擊垃圾桶,刪除該item,具體布局如下圖

2.avtivity將數據封裝成bean對象存在list集合infos中,傳送給adaper

1 //從數據庫中查詢所有數據,dao是數據庫操作對象
2 BlackContactsDao dao = new BlackContactsDao(this);
3 List<BlackContactsInfo> infos = dao.queryALL();
4 //將返回的數據添加到list集合中,傳送給adapter顯示
5 mdapter = new BlackContactsItemAdapter(this,infos);
6 blackcontactsLvList.setAdapter(mdapter);    

3.adaper收到數據后進行顯public class BlackContactsItemAdapter extends BaseAdapter {

 List<BlackContactsInfo> infos; Context context; String type;   //有參構造,傳進infos數據,跟context public BlackContactsItemAdapter(Context context, List<BlackContactsInfo> infos) { this.infos = infos; this.context =context; } @Override public int getCount() { return infos.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if(convertView == null) { convertView = View.inflate(context, R.layout.item_blackcontacts_list, null); holder = new ViewHolder(); //找控件
            holder.ivdele = (ImageView) convertView.findViewById(R.id.blackcontacts_iv_dele); holder.tvPhone = (TextView) convertView.findViewById(R.id.item_blackcontacts_phone); holder.tvType = (TextView) convertView.findViewById(R.id.item_blackcontacts_type); //給converview打上標簽
 convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } final BlackContactsInfo info ; info = infos.get(position); switch (info.type){ case 0: type = "電話"; break; case 1: type = "短信"; break; case 2: type = "電話+短信"; break; }
holder.tvPhone.setText(info.phone); holder.tvType.setText(type);
//給item中的垃圾桶設置點擊事件 holder.ivdele.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //當垃圾桶被點擊了,就根據被點擊的item的號碼,從數據庫中刪除 BlackContactsDao dao = new BlackContactsDao(context); dao.delete(info.phone); //以下下為核心代碼,更新ui infos.remove(info); notifyDataSetChanged(); } }); return convertView; } class ViewHolder{ ImageView ivdele; TextView tvPhone,tvType; } }

4.核心代碼:

                //在對數據庫進行刪除該數據后,也要對傳給listview的數據(list集合進行更新數據),infos集合要移除點擊的對象
                infos.remove(info);
                //再調用notifyDataSetChanged();才可以真正實現數據更新。
                notifyDataSetChanged();

 

 

 
        

---恢復內容結束---


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM