package com.testadapter; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; public class AdapterTest extends Activity { ListView mListview; ArrayList<Node> mlist; ArrayList<Node> mlist1; ArrayList<Node> mlist2; MyAdapter adapter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mListview = (ListView) this.findViewById(R.id.listview); mlist1 = new ArrayList<Node>(); mlist2 = new ArrayList<Node>(); for(int i = 0; i < 5; i++) { Node n = new Node("node"+i, "id" + i); if(i < 3) { mlist1.add(n); } mlist2.add(n); } mlist = mlist1; adapter = new MyAdapter(this, mlist); mListview.setAdapter(adapter); mHandler.sendEmptyMessageDelayed(0, 3000); } public boolean isFirst = true; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { if(isFirst) { mlist = mlist1; Log.d("testAdapter", "first"); adapter.notifyDataSetChanged(); isFirst = false; }else{ mlist = mlist2; adapter.notifyDataSetChanged(); Log.d("testAdapter", "second"); isFirst = true; } mHandler.sendEmptyMessageDelayed(0, 3000); } }; public void onDestroy() { mHandler.removeMessages(0); super.onDestroy(); } class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; // private ArrayList<Node> list; public MyAdapter(Context context, ArrayList<Node> list) { mInflater = LayoutInflater.from(context); // this.list = list; } @Override public int getCount() { // if(list != null) { return mlist.size(); // } // return 0; } @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) { ItemStruct struct; if (convertView == null) { TextView t = new TextView(AdapterTest.this); convertView = t; struct = new ItemStruct(); struct.mName = t; convertView.setTag(struct); }else{ struct = (ItemStruct) convertView.getTag(); } struct.mName.setText(mlist.get(position).name); return convertView; } private class ItemStruct { TextView mName; } } class Node { public String name = ""; public String id = ""; public Node(String name, String id) { this.name = name; this.id = id; } } } 在设计adapter的时候就把其中的数据控制在全局的,不要写成adapter内部的的,否则在adapter.notifyDatasetChanged就不起作用了。