提问

#楼主# 2016-5-15

跳转到指定楼层
有两个界面A和B ,A里面有一个ListView显示数据库中的数据,B中添加数据,关闭B的时候更新A中ListView的数据。可是用adapter.notifyDataSetChanged(); 这个方法却没有效果。郁闷的要死啊!求解求解求解求解求解求解求解求解
下面是A中更新的代码:
@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                // TODO Auto-generated method stub
                if (resultCode==1) {
                        if (adapter!=null) {
                                getdata();
                                adapter.notifyDataSetChanged();
                        }else {
                                adapter=new CommodityAdapter(this,getdata());
                                listview.setAdapter(adapter);
                        }
                }
                //super.onActivityResult(requestCode, resultCode, data);
        }
getdata()是获取数据库中的数据。
我这样写有问题么????求帮助


转播转播
回复

使用道具

四海飘渺 发表于 2016-5-15 23:18:21
这个方法是告诉listView有新数据了需要重绘,如果你的数据没有变化,listView也就没有变化啊,你需要看看你adapter里面的数据集合有没有更新


点评


dongevil       

数据有变化,本来就2条数据,添加后是三条
详情
回复
发表于 4 天前
回复 支持 反对

使用道具 举报

sunjigang 发表于 2016-5-15 23:19:08
给listview重新setadapter可以,你可以尝试下...


点评


dongevil       

ok,我等下去试试
详情
回复
发表于 4 天前
回复 支持 反对

使用道具 举报

Von_dreamer 发表于 2016-5-15 23:19:46
这个Adapter的代码可以贴出来吗,如果你的Adapter是直接写在Activity里的应该不会出现这种情况,单独写在另一个文件里的话,需要重新new一个实例,或者重写notifyDatasetChange方法,将新的数据传进去


点评


dongevil       

adapter是重新建了个文件写的,代码是这样的,你看看:
详情
回复
发表于 4 天前
回复 支持 反对

使用道具 举报

sunjigang 发表于 2016-5-15 23:20:18

Von_dreamer 发表于 2016-5-11 08:22

这个方法是告诉listView有新数据了需要重绘,如果你的数据没有变化,listView也就没有变化啊,你需要看看你 ...

数据有变化,本来就2条数据,添加后是三条
回复 支持 反对

使用道具 举报

aoyun 发表于 2016-5-15 23:21:12

sunjigang 发表于 2016-5-11 09:44

这个Adapter的代码可以贴出来吗,如果你的Adapter是直接写在Activity里的应该不会出现这种情况,单独写在另 ...

adapter是重新建了个文件写的,代码是这样的,你看看:
[ol]
  • public class MyAdapter extends BaseAdapter {
  •         private Context context;
  •         private List list = null;
  •         
  •         public MyAdapter(Context context,List list){
  •                 dataFormat=context.getText(R.string.dataFormat).toString();
  •                 this.context=context;
  •                 this.list=list;
  •         }
  •         @Override
  •         public int getCount() {
  •                 // TODO Auto-generated method stub
  •                 return list.size();
  •         }
  •         @Override
  •         public Object getItem(int position) {
  •                 // TODO Auto-generated method stub
  •                 return null;
  •         }
  •         @Override
  •         public long getItemId(int position) {
  •                 // TODO Auto-generated method stub
  •                 return 0;
  •         }
  •         @Override
  •         public View getView(int position, View convertView, ViewGroup parent) {
  •                 // TODO Auto-generated method stub
  •                 ViewHolder viewHolder = null;
  •                
  •                 if (convertView==null) {
  •                         viewHolder=new ViewHolder();
  •                         convertView=LayoutInflater.from(context).inflate(R.layout.commodity_item, null);
  •                         viewHolder.name=(TextView)convertView.findViewById(R.id.name);
  •                         convertView.setTag(viewHolder);
  •                 }else {
  •                         viewHolder=(ViewHolder)convertView.getTag();
  •                 }
  •                 viewHolder.name.setText(list.get(postion).getname());
  •                 return convertView;
  •         }
  • }[/ol]复制代码
  • 回复 支持 反对

    使用道具 举报

    sunjigang 发表于 2016-5-15 23:21:46

    四海飘渺 发表于 2016-5-11 09:01

    给listview重新setadapter可以,你可以尝试下...

    ok,我等下去试试
    回复 支持 反对

    使用道具 举报

    四海飘渺 发表于 2016-5-15 23:22:41
    public MyAdapter(Context context,List list){
                    dataFormat=context.getText(R.string.dataFormat).toString();
                    this.context=context;
                    this.list=list;
            }
    你需要吧adapter里面的这个list更新,在调用那个方法
    回复 支持 反对

    使用道具 举报

    四海飘渺 发表于 2016-5-15 23:23:24
    跟我上面说的一样,你需要用方法把更新后的list传进去,可以重新new一个adapter,然后setAdapter,不过最好添加一个方法,直接将list传进去,免得每次刷新数据都要重新生成对象
    回复 支持 反对

    使用道具 举报

    aoyun 发表于 2016-5-15 23:24:20
    MyAdapter 你要在这个类里面,写个新方法,给这个类的List list赋值,在调notifyDataSetChanged()方法,就有效果了
    回复 支持 反对

    使用道具 举报

    B Color Link Quote Code Smilies
    *滑动验证:

    关于作者

    Von_dreamer

    爱咖老人

    • 主题

      2

    • 帖子

      81

    • 关注者

      3