首页 > 代码库 > 新手求助:关于Activity间跳转的小问题

新手求助:关于Activity间跳转的小问题

============问题描述============


两个Activity,A和B。
A里边主要有一个listview,显示数据库里的东西;B由A跳转过来,里边有一些操作,2个按钮X和Y,X是直接返回A,Y是更新数据库然后返回A。
问题在这里:A跳转B时,没有使用finish(),这样X就可以finish()掉B直接就返回A了,A也不用重新绘制布局,这没问题。但是Y操作回到A我就不会了,这时回到A需要更新其中内容了(重新绘制布局)。我尝试用startActivityForResult来跳转,Y操作后在A的onActivityResult里执行更新listview的适配器,但是运行后A仍然没有发生刷新(但是onActivityResult里的Toast是执行了),也没报错。是我刷新listview的操作不对吗?
求指教
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode==RESULT_OK){
         Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show(); 
         myAdapter=new MyActivityAdapter(MyActivity.this,annList);
myAdapter.notifyDataSetChanged();
listview.setAdapter(myAdapter);
        }
    }

============解决方案1============


创建Adapter和setAdapter不要在OnActivityResult函数里调用,而是应该在onCreate里调用。
onActivityResult里只要修改数据对象annList,然后调用notifyDataSetChanged就可以。

============解决方案2============


引用 6 楼 TheUnforgiven 的回复:
Quote: 引用 3 楼 kifile 的回复:

额,刚才没看清楚代码,你的问题其实是 myAdapter 设置错误,,你在 onActivityResult 中重新初始化了 myAdapter, 先调用了 notify,然后才 set,你可以更改一下顺序呢,,,不过建议是只更改 mAdapter 中的数据,不要重新初始化,然后直接使用 notifyDataChanged 就好了


问题最终解决了,还是onActivityResult里边的问题:
@Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if(resultCode==RESULT_OK){
             Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show(); 
             annList=getData();
             myAdapter=new MyActivityAdapter(MyActivity.this,annList);
             listview.setAdapter(myAdapter);
          }
      } 
可能是我的代码的结构有问题吧,我的MyActivityAdapter是单独一个class文件,没有放在MyActivity.class里,所以只能先new,再setAdapter。ps:我这样结构不合理吗?


这个无所谓 Adapter 的位置的,主要是你的 annList 是通过 getData()获取的,相当于一个新的 list, 因此你调用 notifyDataChange 的时候,数据其实是没有更新的,正确的使用方式是  annList.clear(); annList.addAll(getData());,myAdapter.notifyDataChanged();

新手求助:关于Activity间跳转的小问题