Activity 完成后更新选项卡布局中的 ListFragment

Update ListFragment in Tab Layout when Activity finishes

在我的应用程序中,我有一个选项卡布局(总共 4 个),每个选项卡都包含一个由 ViewPagerAdapter 管理的 ListFragment,我想做的是在 activity (使用操作栏中的按钮调用)完成,并可能将焦点设置在右侧选项卡上。

我搜索了一个解决方案并找到了这个:update ListFragment when Activity finishes,但似乎对我的情况不起作用。

在我使用的 MainActivity 中启动 activity(用于添加用户以显示在列表中的那个):

Intent intent = new Intent(this, CreateUser.class);
startActivityForResult(intent, 101);

在 CreateUser 结束时 activity 我设置了:

setResult(Activity.RESULT_OK);
finish();

并且在ListFragment中class:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if ((requestCode == MYACTIVITY_REQUEST_CODE) && (resultCode == Activity.RESULT_OK)){
        ((BaseAdapter)adapter).notifyDataSetChanged();
    }
}

但是当 activity 完成时什么也没有发生,因为永远不会调用 onActivityResult。我该怎么办?

编辑:添加了 class 以便更好地理解

CreateUser.java

public class CreateUser extends AppCompatActivity {

  //The user creation process is done inside class ProcessCreateUser
  //that extend AsycTask

  private class ProcessCreateUser extends AsyncTask<String, String, JSONObject> {

    //...
    //onPreExecute, doInBackground
    //...

    @Override
    protected void onPostExecute() {
        super.onPostExecute();

        //db op...

        //at this point the db is updated with the new user and close the activity

        finish();
    }
  }

  public void onDestroy(){
        Tab3.updateFragmentList();
  }
}

Tab3.java (ListFragment class)

public class Tab3 extends ListFragment implements Observer
{
    //in onActivityCreated(Bundle savedInstanceState) i get the data from the db and set the adapter

    @Override
    public void update(Observable observable, Object data) {

    }

    public static void updateFragmentList() {
       //problem: i can't get the adapter from a static function
       //but this must be static for be called from CreateUser
       ((BaseAdapter)adapter).notifyDataSetChanged();
    }
}

我想你可以使用观察者模式。例如:

public interface Observer {
  public void updateFragmentList();
}

public class YourFragment extends Fragment implement Observer {
  public void updateFragmentList() {
    // You do some magic code here, such as:
    // Update your data for each FragmentList
  }
}

public class YourActivity extends Activity {
  private ArrayList<Observer> observers = new ArrayList<Observer>();
  public void onCreate() {
     // Here you add all FragmentList to observers
  }

  public void onDestroy(){ 
     for(Observer ob in observers) {
        ob.updateFragmentList();
     }
  }
}

我终于明白了(没有 Observer),我将 onActivityResult 方法从 ListFragment 移到了 MainActivity,在 ListFragment 中我为所有更新作业添加了一个简单的 public void updateView() 方法的列表,我已经将以下方法添加到 ViewPagerAdapter 中以调用 updateView() 方法:

@Override
public int getItemPosition(Object object) {
    if (object instanceof Tab3) {
        ((Tab3) object).updateView();
    }
    return super.getItemPosition(object);
}