发表于: 2018-11-10 20:53:56

0 808


一、今天完成的事情

1.

点击地图上的标记点后会在当前activity的fargment中显示相应的数据,第一次点击没有问题,但是之后点击其他标记点时,fragment中显示的数据还是第一次点击的标记点的,这是因为这些标记点的数据是显示在同你一个

fragment上的,每次都是隐藏了fragment的容器,并没有对fragment进行操作,所以fragment中的数据不会刷新。为了让每次进入fragment时都能刷新数据就需要在隐藏fragment的容器的同时,对fragment进行一些操作,比如

1.销毁fragment,那么再次进入fragment时会回调fragment的onStart()方法,在onStart()方法中进行刷新数据的操作;

@Override
public void onStart() {
   super.onStart();
   if (isAdded()) { //判断Fragment已经依附Activity
       try {
                        objectId = getArguments().getString("objectId", "");
       } catch (NullPointerException e) {
             e.printStackTrace();
       }
             if (!objectId.equals("")) {
                       //开始查询
    new Thread() {
                                  public void run() {
                       WorkerPost.queryWorkerPostInfo(objectId);
                  }
          }.start();
      }
   }
}


2.暂停fragment,再次进入时回调onResume(),在onResume()中刷新数据;

@Override
public void onResume() {
    super.onResume();
   if (isAdded()) { //判断Fragment已经依附Activity
       try {
           objectId = getArguments().getString("objectId", "");
       } catch (NullPointerException e) {
           e.printStackTrace();
       }
       if (!objectId.equals("")) {
           //开始查询
           new Thread() {
               public void run() {
                   WorkerPost.queryWorkerPostInfo(objectId);
               }
           }.start();
       }
   }
}

3.隐藏fragment,再次进入时回调onHiddenChanged(),在onHiddenChanged()中刷新数据。

@Override
public void onHiddenChanged(boolean hidden) {
   Log.i(TAG, "onHiddenChanged: 回调onHiddenChanged");
   Log.i(TAG, "onHiddenChanged: 状态:" + hidden);
    super.onHiddenChanged(hidden);
    if (hidden) {
         return;
    } else {
            progressDialog.show();
        //刷新数据
        try {
                                    objectId = getArguments().getString("objectId", "");
            Log.i(TAG, "onHiddenChanged: \nobjectId:" + objectId);
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
        if (!objectId.equals("")) {
            //开始查询
            new Thread() {
                public void run() {
                    WorkerPost.queryWorkerPostInfo(objectId);
                }
            }.start();
        }
    }
}

正常情况下使用hide() + onHiddenChanged()比较合适,应为会少走一些生命周期。


2.

全局FragmentTransaction的事务只能commit()一次,如果在代码中重复commit(),就会报错

java.lang.IllegalStateException: commit already called

所以每次需要commit()时都要重新获取FragmentTransaction,这样的话设置一个全局FragmentTransaction似乎也没什么意义,除非利用这个特性去做一些骚操作。


二、明天计划的事情

      继续完善细节问题


三、遇到的问题

    


四、收获

   对fragment的理解比以前更进一步



返回列表 返回列表
评论

    分享到