是这样的。我从SimpleAdapter继承了一个MySimpleAdapter,同时也继承了一个ListActivity, 并将MySimpleAdapter设置为这个ListActivity的adapter,此时可以正常显示数据,但是发现数据量多余一屏时,滚动屏幕无法更新list。于是我就添加了一个onContentChanged()的函数,发现一添加这个函数(哪怕一句话也不写),程序就会crash,
09-02 17:14:30.694 E/AndroidRuntime( 5794): Caused by: java.lang.NullPointerException
09-02 17:14:30.694 E/AndroidRuntime( 5794):  at ndroid.app.ListActivity.setListAdapter(ListActivity.java:265)
有人遇到过这种问题吗,太纠结了

解决方案 »

  1.   

    屏幕滚动和onContentChanged没关系啊。
    数据不更新,应该是你的MySimpleAdapter实现问题。
      

  2.   


        final class MySimpleAdapter extends SimpleAdapter {
            private String [] mFrom;
            private int[] mTo;
            protected LayoutInflater mInflater;
            private int mResourcesId;
            private List<Map<String, Object>> mListData = null;        SpeedDialAdapter(Context context, List<Map<String, Object>> items,
                    int resourceId, String[] from, int []to ) {            super(context, items, resourceId, from, to);
                mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                mListData = items;
                mResourcesId = resourceId;
                mTo = to;
            }        @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View v;
                if(null == convertView)
                {
                    Log.i(TAG,"geView");                v = mInflater.inflate(mResourcesId, parent, false);
                    int count = mTo.length;
                    View[] views = new View[count];                for(int i=0;i<count;i++)
                    {
                        views[i] = v.findViewById(mTo[i]);
                    }
                    v.setTag(views);
                    //if(mListData)
                    Map<String, Object> map = mListData.get(position);
                    Log.i(TAG, "position is " + position);
                    String label = map.get(LABEL_KEY) == null? "": map.get("label").toString();
                    String number = map.get(NUMBER_KEY) == null? "": map.get("number").toString();
                    String count_label = map.get("count")== null ? "" :map.get("count").toString();
                    String line = map.get("line") == null? "":map.get("line").toString();                if(number.equals(""))
                    {
                        setViewImage(((ImageView)views[ICON_INDEX]),R.drawable.add_icn);                }else
                    {
                        setViewImage(((ImageView)views[ICON_INDEX]),R.drawable.delete_icn);
                    }                if(line1.equals(""))
                    {
                        setViewText(((TextView)views[LINE1_INDEX]),number);
                    }
                    else
                    {
                        if(number.equals(""))
                        {
                            Log.i(TAG,"Error,it should not exist");
                        }
                        setViewText(((TextView)views[LINE1_INDEX]),line);
                        setViewText(((TextView)views[NUMBER_INDEX]),number);
                        setViewText(((TextView)views[LABEL_INDEX]),label);                }                if(count_label.equals(""))
                    {
                       Log.i(TAG,"no Label");
                       setViewText(((TextView)views[COUNT_INDEX]),String.valueOf(position));
                    }
                    else
                    {
                        setViewText(((TextView)views[COUNT_INDEX]),count_label);
                    }                return v;            }else
                {
                    return convertView;
                }        }
            @Override
            public int getCount()
            {
                return mListData.size();
            }
            @Override
            public Object getItem(int position) {
                return mListData.get(position);
            }
        }
    那自己实现SimpleAdapter需要注意什么? 代码贴上了,帮忙看下问题在哪儿吧,多谢了~
      

  3.   

    用个线程去取数据,得到数据再更新界面,好像有个contentProvider,找个android自带的例子看
      

  4.   

    解决了。 if(null == convertView)else时,也要对convertView更新数据。