在 onResume 里刷新吧, android 的 onActivityResult只有在你使用 startActivityForResult 并且在另一个 activity 中 setResult 后才会触发,而 onResume 每次重现都会触发

解决方案 »

  1.   

    算是解决了,onActivityResult里刷新整个activity,但是感觉这样很没效率啊,反应很慢,期待更好的办法
    Intent intent = new Intent(MyActivity.this, MyActivity.class);
    intent.putExtras(data.getExtras());
    startActivity(intent);
    finish();
      

  2.   

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

  3.   

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

  4.   


    是这个意思吗:
    @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.notifyDataSetChanged();
             }
         } 
    这样还是没有刷新listview
      

  5.   


    问题最终解决了,还是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:我这样结构不合理吗?
      

  6.   


    问题最终解决了,还是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();
      

  7.   


    是这个意思吗:
    @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.notifyDataSetChanged();
             }
         } 
    这样还是没有刷新listview
    这个写法是错的。因为在java里,annList是个引用,你修改了annList,只是把annList指向另外一个对象,而adapter引用的annList还是指向原先的对象。
    正确的写法是调用annList.append之类的方法。
      

  8.   


    果然是这样,list重新装载后刷新适配器即可。
    我好想明白了一点了,感谢你们两位!