|
在项目中,遇到不能ListView及时更新的问题。写了一个demo,其中也遇到一些问题,一并写出来。好吧,上代码:
- public class PersonAdapter extends BaseAdapter {
- private ArrayList<PersonBean> mList;
- private Context mContext;
-
- public PersonAdapter(ArrayList<PersonBean> list, Context context) {
- mList = list;
- mContext = context;
- }
-
- public void refresh(ArrayList<PersonBean> list) {
- mList = list;
- notifyDataSetChanged();
- }
-
-
- @Override
- public int getCount() {
- return 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) {
- Holder holder = null;
- if (convertView == null) {
- LayoutInflater inflater = LayoutInflater.from(mContext);
- convertView = inflater.inflate(R.layout.list_item, null);
- holder = new Holder();
- holder.mNameText = (TextView)convertView.findViewById(R.id.name_text);
- holder.mIDText = (TextView)convertView.findViewById(R.id.id_text);
- convertView.setTag(holder);
- } else {
- holder = (Holder) convertView.getTag();
- }
- holder.mNameText.setText(mList.get(getCount() - position - 1).getName());
- holder.mIDText.setText(mList.get(getCount() - position - 1).getID());
- return convertView;
- }
-
- class Holder {
- private TextView mNameText, mIDText;
- }
- }
复制代码 PersonAdapter继承自BaseAdapter,里面的代码都应该比较熟悉。里面注意这点代码:
- public void refresh(ArrayList<PersonBean> list) {
- mList = list;
- notifyDataSetChanged();
- }
复制代码 在初始化PersonAdapter的时候,需要外部导入一个mList。
- public PersonAdapter(ArrayList<PersonBean> list, Context context) {
- mList = list;
- mContext = context;
- }
复制代码 在使用这种类型时,在Activity使用mAdapter.notifyDataSetChanged()时候,有时候会发现数据不能够及时的更新。这个时候,就比较需要调用refresh()这个方法了。
- public class ListViewRefreshActivity extends Activity {
-
- private ListView mListView;
- private ArrayList<PersonBean> mList;
- private PersonAdapter mAdapter;
- private Handler mHandler;
- private String mName, mID;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- mListView = (ListView)findViewById(R.id.listView);
- mList = new ArrayList<PersonBean>();
- mAdapter = new PersonAdapter(mList, ListViewRefreshActivity.this);
- mListView.setAdapter(mAdapter);
-
- mHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- mList.add((PersonBean) msg.obj);
- Log.v("@@@@@@", "this is get message");
- mAdapter.refresh(mList);
- // mAdapter.notifyDataSetChanged();
- }
- };
-
- // final Message message = new Message();
- new Thread(new Runnable() {
-
- @Override
- public void run() {
- try {
- for (int i = 0; i < 10; i++) {
- mName = "hao :" + i;
- mID = "" + i;
- PersonBean bean = new PersonBean();
- bean.setID(mID);
- bean.setName(mName);
- Message message = new Message();
- message.obj = bean;
- Thread.sleep(3000);
- mHandler.sendMessage(message);
- // mHandler.sendMessageDelayed(message, 10000);
- }}catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
- }
复制代码
|
|