【发布时间】:2016-06-07 13:21:47
【问题描述】:
问题:很少有代码示例无法帮助我获得对我的 Fragment 的引用。它总是返回 null。
我做了什么:我有一个包含片段的活动。片段进行网络连接。如果它已经完成加载,我在父活动中调用onNetworkingFinished 方法。
在onNetworkingFinished 方法内部,我需要获取对片段的引用才能调用片段的方法。
片段肯定不为空,因为它调用了 onNetworkingFinished 方法......
public class MainActivity extends AppCompatActivity implements MaschineFragment.Callbacks{
private Toolbar toolbar;
private FloatingActionButton mFab;
private CoordinatorLayout mCordinatorLayout;
private MaschineFragment mMaschineFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.maschinelistcontainer, new MaschineFragment(), "maschinefragment");
if(getResources().getBoolean(R.bool.dual_pane)){
ft.add(R.id.detailreviewcontainer, new ReviewMaschineFragment(), "detailfragment");
}
ft.commit();
mCordinatorLayout = (CoordinatorLayout) findViewById(R.id.maschineCoordinatorLayout);
mFab = (FloatingActionButton) findViewById(R.id.fab_download_maschinen);
mFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@Override
public void onNetworkingFinished(boolean finishedWithError) {
if(finishedWithError){
Log.i("Networking", "Daten NUR lokal geladen");
Snackbar snackbar = Snackbar
.make(mCordinatorLayout, getResources().getString(R.string.networking_finished_with_error), Snackbar.LENGTH_LONG);
snackbar.show();
} else {
Log.i("Networking", "Fertig geladen");
Snackbar snackbar = Snackbar
.make(mCordinatorLayout, getResources().getString(R.string.networking_finished_with_error), Snackbar.LENGTH_LONG);
snackbar.show();
}
mMaschineFragment = (MaschineFragment) getSupportFragmentManager().findFragmentById(R.id.maschine_fragment);
if (mMaschineFragment==null || ! mMaschineFragment.isInLayout()) {
Log.i("Maschine Fragment", "NULL und nicht im Layout");
}
else {
Log.i("Maschine Fragment", "VORHANDEN");
}
}
(...)
}
【问题讨论】:
-
你应该使用接口在fragment和activity之间进行通信
-
我看到你在你使用的每个片段上都附加了一个标签,为什么不试试
findFragmentByTag? -
您应该搜索标签“mashinefragment”而不是 ID。您传入的 ID 是 View ID,而不是 Fragment ID(是的,这很混乱)。
-
@NongthonbamTonthoi:我总是使用接口将数据从片段传递回活动。但反过来我得到了问题:循环继承涉及
标签: android android-fragments android-activity fragmentmanager