2 android freshman android_freshman 于 2014.08.15 17:15 提问

调用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
zhangpengfeiAndroid   2014.08.18 12:16

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

dailai111
dailai111 我现在卡在这个问题上两天了啊
2 年多之前 回复
dailai111
dailai111 回复android_freshman: 你是怎么解决的啊求救啊
2 年多之前 回复
android_freshman
android_freshman 已解决,是我布局的问题。convertview被我转换了,不是你说的问题。
3 年多之前 回复
u012537992
u012537992   2015.09.16 14:31

你的问题解决了,求指导

qq_31294173
qq_31294173   2015.11.16 16:33

大神,是是怎么解决的,求指导

android_freshman
android_freshman 我那个时候,应为Item的布局写的有点问题。导致不执行的。你可以贴下你的代码。
大约 2 年之前 回复
android_freshman
android_freshman 我那个时候,应为Item的布局写的有点问题。导致不执行的。你可以贴下你的代码。
大约 2 年之前 回复
android_freshman
android_freshman 我那个时候,应为Item的布局写的有点问题。导致不执行的。你可以贴下你的代码。
大约 2 年之前 回复
android_freshman
android_freshman 我那个时候,应为Item的布局写的有点问题。导致不执行的。你可以贴下你的代码。
大约 2 年之前 回复
android_freshman
android_freshman 我那个时候,应为Item的布局写的有点问题。导致不执行的。你可以贴下你的代码。
大约 2 年之前 回复
android_freshman
android_freshman 我那个时候,应为Item的布局写的有点问题。导致不执行的。你可以贴下你的代码。
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!