【发布时间】:2015-12-22 11:45:47
【问题描述】:
我在我的 Activity 的 onCreate() 方法上添加了一个片段。然后,我尝试使用 findFragmentByTag() 访问它。它第一次工作,但如果我回击关闭我的活动并再次启动它,findFragmentByTag() 返回 null。
在这两种情况下,片段都在我的活动中直观地呈现。当我关闭 Activity 时,会调用片段的 onDestroy() 方法。
我使用 replace() 代替 add() 和使用 findFragmentById() 代替 findFragmentByTag() 的结果相同。
MyActivity.java
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
final MyFragment fragment = new MyFragment();
final FragmentManager fm = getSupportFragmentManager();
// fm.getFragments() returns null
fm.beginTransaction()
.add(R.id.content_frame, fragment, "MyFragment")
.commit();
}
private void onReceiveData() {
final FragmentManager fm = getSupportFragmentManager();
// fm.getFragments() returns an array with one null element (except on first try)
final MyFragment fragment = (MyFragment) fm.findFragmentByTag("MyFragment");
// Fragment is null except during the first launch of MyActivity
}
}
MyFragment.java
import android.support.v4.app.Fragment;
public class MyFragment extends Fragment {
...
}
R.layout.activity_layout
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
知道为什么 findFragmentByTag() 只能在第一次工作吗?
【问题讨论】:
-
何时调用 onReceiveData ??
-
getSupportFragmentManager().executePendingTransactions()
-
@AshishAgrawal 当我从网络接收数据时调用它。我在 onResume() 上调用请求。
-
您是否尝试用 addToBackStack 替换添加片段
-
@AshishAgrawal 是的,正如我在帖子中所说的那样。