我在Activity的onCreate()方法中添加了一个Fragment。然后,我尝试使用findFragmentByTag()访问它。它第一次工作,但如果我回击关闭我的Activity并再次启动它,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()只能在第一次工作?
答案 0 :(得分:0)
我找到了问题的原因。它实际上很简单,与上面发布的代码无关。
它是由EventBus引起的,当我从网络接收数据时,我用它来调用onReceiveData
方法。我忘了在我的MyActivity onDestroy
方法上取消订阅EventBus,这导致了这种奇怪的行为。
非常感谢!