ListActivity 设置adapter异常问题

lionc650 2011-09-02 05:34:00
是这样的。我从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)


有人遇到过这种问题吗,太纠结了。。。
...全文
154 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lionc650 2011-09-03
  • 打赏
  • 举报
回复
解决了。 if(null == convertView)else时,也要对convertView更新数据。
jeky_zhang2013 2011-09-02
  • 打赏
  • 举报
回复
用个线程去取数据,得到数据再更新界面,好像有个contentProvider,找个android自带的例子看
lionc650 2011-09-02
  • 打赏
  • 举报
回复
继续找人帮看问题
lionc650 2011-09-02
  • 打赏
  • 举报
回复

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需要注意什么? 代码贴上了,帮忙看下问题在哪儿吧,多谢了~
儿大不由爷 2011-09-02
  • 打赏
  • 举报
回复
屏幕滚动和onContentChanged没关系啊。
数据不更新,应该是你的MySimpleAdapter实现问题。

80,331

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧