搜索
热搜: 活动 交友 discuz
查看: 3548|回复: 0
打印 上一主题 下一主题

ListView中使用自定义Adapter及时更新数据

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2016-5-13 15:33:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在项目中,遇到不能ListView及时更新的问题。写了一个demo,其中也遇到一些问题,一并写出来。好吧,上代码
  1. public class PersonAdapter extends BaseAdapter {
  2.     private ArrayList<PersonBean> mList;
  3.     private Context mContext;
  4.       
  5.     public PersonAdapter(ArrayList<PersonBean> list, Context context) {
  6.         mList = list;
  7.         mContext = context;
  8.     }
  9.       
  10.     public void refresh(ArrayList<PersonBean> list) {
  11.         mList = list;
  12.         notifyDataSetChanged();
  13.     }
  14.       
  15.    
  16.     @Override
  17.     public int getCount() {
  18.         return mList.size();
  19.     }
  20.    
  21.     @Override
  22.     public Object getItem(int position) {
  23.         return mList.get(position);
  24.     }
  25.    
  26.     @Override
  27.     public long getItemId(int position) {
  28.         return position;
  29.     }
  30.    
  31.     @Override
  32.     public View getView(int position, View convertView, ViewGroup parent) {
  33.         Holder holder = null;
  34.         if (convertView == null) {
  35.             LayoutInflater inflater = LayoutInflater.from(mContext);
  36.             convertView = inflater.inflate(R.layout.list_item, null);
  37.             holder = new Holder();
  38.             holder.mNameText = (TextView)convertView.findViewById(R.id.name_text);
  39.             holder.mIDText = (TextView)convertView.findViewById(R.id.id_text);
  40.             convertView.setTag(holder);
  41.         } else {
  42.             holder = (Holder) convertView.getTag();
  43.         }
  44.         holder.mNameText.setText(mList.get(getCount() - position - 1).getName());
  45.         holder.mIDText.setText(mList.get(getCount() - position - 1).getID());
  46.         return convertView;
  47.     }
  48.    
  49.     class Holder {
  50.         private TextView mNameText, mIDText;
  51.     }
  52. }
复制代码
PersonAdapter继承自BaseAdapter,里面的代码都应该比较熟悉。里面注意这点代码:



  1. public void refresh(ArrayList<PersonBean> list) {
  2.         mList = list;
  3.         notifyDataSetChanged();
  4.     }
复制代码
在初始化PersonAdapter的时候,需要外部导入一个mList。



  1. public PersonAdapter(ArrayList<PersonBean> list, Context context) {
  2.         mList = list;
  3.         mContext = context;
  4.     }
复制代码
在使用这种类型时,在Activity使用mAdapter.notifyDataSetChanged()时候,有时候会发现数据不能够及时的更新。这个时候,就比较需要调用refresh()这个方法了。



  1. public class ListViewRefreshActivity extends Activity {
  2.    
  3.     private ListView mListView;
  4.     private ArrayList<PersonBean> mList;
  5.     private PersonAdapter mAdapter;
  6.     private Handler mHandler;
  7.     private String mName, mID;
  8.    
  9.     @Override
  10.     public void onCreate(Bundle savedInstanceState) {
  11.         super.onCreate(savedInstanceState);
  12.         setContentView(R.layout.main);
  13.    
  14.         mListView = (ListView)findViewById(R.id.listView);
  15.         mList = new ArrayList<PersonBean>();
  16.         mAdapter = new PersonAdapter(mList, ListViewRefreshActivity.this);
  17.         mListView.setAdapter(mAdapter);
  18.    
  19.         mHandler = new Handler() {
  20.    
  21.             @Override
  22.             public void handleMessage(Message msg) {
  23.                 super.handleMessage(msg);
  24.                 mList.add((PersonBean) msg.obj);
  25.                 Log.v("@@@@@@", "this is get message");
  26.                 mAdapter.refresh(mList);
  27. //              mAdapter.notifyDataSetChanged();
  28.             }
  29.         };
  30.    
  31. //      final Message message = new Message();
  32.         new Thread(new Runnable() {
  33.    
  34.             @Override
  35.             public void run() {
  36.                 try {
  37.                     for (int i = 0; i < 10; i++) {
  38.                         mName = "hao :" + i;
  39.                         mID = "" + i;
  40.                         PersonBean bean = new PersonBean();
  41.                         bean.setID(mID);
  42.                         bean.setName(mName);
  43.                         Message message = new Message();
  44.                         message.obj = bean;
  45.                         Thread.sleep(3000);
  46.                         mHandler.sendMessage(message);
  47. //                      mHandler.sendMessageDelayed(message, 10000);
  48.                     }}catch (Exception e) {
  49.                         e.printStackTrace();
  50.                     }
  51.             }
  52.         }).start();
  53.     }
  54. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-19 16:09 , Processed in 0.054688 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表