首先放代码:
public View onCreateView() {
Log.d(TAG, "onCreateView");
if (layout == null) {
//add
layout = new LinearLayout(activity);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setBackgroundColor(Color.WHITE);
listview = new ListView(activity);
// listview.setDividerHeight(0);
listview.setVerticalScrollBarEnabled(false);
LinearLayout.LayoutParams listParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, 0);
layout.addView(listview, listParams);
itemList = Global.toDoSrv.getAllData(false);
Log.d(TAG, "itemList"+itemList.get(0).getTitle());
adapter = new ToDoListAdapters(activity,itemList);
listview.setAdapter(adapter);
updateList();
}
if (listview.getCount() <= 0) {
listview.setBackgroundColor(Color.WHITE);
ImageView image = new ImageView(activity);
LayoutParams mParams = new LayoutParams(198, 242);
mParams.setMargins(172, 220, 0, 0);
image.setLayoutParams(mParams);
image.setMaxHeight(198);
image.setMaxWidth(242);
image.setBackgroundResource(R.drawable.none_todo_bg);
layout.addView(image);
}
if (layout.getParent() != null) {
((ViewGroup) layout.getParent()).removeView(layout);
}
return layout;
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "handleMessage:"+msg);
switch (msg.what) {
case MESSAGE_UPDATE_DATA:
doUpdate();
break;
case MESSAGE_UPDATE_LISTVIEW:
updateAdapter();
break;
}
}
};
private void updateList() {
itemList = Global.toDoSrv.getAllData(true);
adapter.notifyDataSetChanged();
}
// 跟新
protected void doUpdate() {
new Thread(new Runnable() {
@Override
public void run() {
listNewTodo = Global.toDoSrv.getAllData(false);
handler.sendEmptyMessage(MESSAGE_UPDATE_LISTVIEW);
}
}).start();
}
// 刷新适配器
public void updateAdapter() {
itemList.clear();
int count = listNewTodo.size();
for (int i = 0; i < count; ++i) {
itemList.add(listNewTodo.get(i));
};
adapter.notifyDataSetChanged();
}
private class ToDoListAdapters extends BaseAdapter {
private NoteListActivity noteactivity;
private List<ToDoItem> itemLists = new ArrayList<ToDoItem>();
public ToDoListAdapters(Context c,List<ToDoItem> itemList){
this.noteactivity = (NoteListActivity) c;
this.itemLists = itemList;
}
@Override
public int getCount() {
if (itemLists == null) {
Log.d(TAG, "ToDoListAdapters-->getCount-->itemLists == null");
return 0;
}
Log.d(TAG, "ToDoListAdapters-->getCount-->itemLists != null count:"+itemLists.size());
return itemLists.size();
}
@Override
public ToDoItem getItem(int arg0) {
if (itemLists == null) {
return null;
}
Log.d(TAG, "ToDoListAdapters-->getCount-->itemLists != null ToDoItem:"+itemLists.get(arg0));
return itemLists.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup root) {
Log.d(TAG, "ToDoListAdapters:getView");
ToDoItemView itemView;
if (convertView == null) {
itemView = new ToDoItemView(noteactivity);
} else {
itemView = (ToDoItemView) convertView;
}
ToDoItem item = getItem(position);
itemView.setToDoItem(item);
return itemView;
}
}
public void update(boolean force) {
if (adapter == null) {
adapter = new ToDoListAdapters(activity,itemList);
listview.setAdapter(adapter);
adapter.notifyDataSetChanged();
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position < adapter.getCount()) {
// 从适配器中获取当前点击项的内容
}
}
});
}
if (adapter != null && (adapter.getCount() < 1 || force)) {
handler.sendEmptyMessageDelayed(MESSAGE_UPDATE_DATA, 500);
}
}
在调试的时候getcount会获得count>0,但getView()就是不执行,线程会影响getView()?这个问题郁闷了好久,求解答。。。。。
convertview 每次回调时候必须给他初始化数据,重画也是画convertview、 todoitemlist是什么类啊 人家getview是有局部变量的convertview,对他进行布局重画优化等操作。自己看源码吧
你的问题解决了,求指导
大神,是是怎么解决的,求指导