android_小路 2014-08-15 09:15 采纳率: 0%
浏览 11341

调用adapter的时候,会执行getcount且返回count>0,但就是不执行getView().

首先放代码:

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()?这个问题郁闷了好久,求解答。。。。。

  • 写回答

3条回答

  • zhangpengfeiAndroid 2014-08-18 04:16
    关注

    convertview 每次回调时候必须给他初始化数据,重画也是画convertview、 todoitemlist是什么类啊 人家getview是有局部变量的convertview,对他进行布局重画优化等操作。自己看源码吧

    评论

报告相同问题?

悬赏问题

  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)