发表于: 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的理解比以前更进一步
评论