我正在为Android制作应用程序,该图片显示了我现在拥有的内容:
所以我有MainActivity,带有FrameLayout和Toolbar。 (在某些片段中,我需要隐藏工具栏,在某些更改中,它的名称)
在MainActivity中,我有FrameLayout。
该应用程序的工作方式如下:我有服务器,可以在其中获取数据。我制作了存储库+ viewmodel + livedata(例如在Google Codelabs中),并使用socket.io与服务器连接。
例如,我有2个片段来显示一些信息,因此它是如何工作的:
首先,用户进入FragmentMain(下面的代码):
MainActivity中的方法来设置片段
protected void setFragment(Fragment fragment) {
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.fragment_placeholder, fragment);
t.commit();
}
我也正在使用此代码与数据库连接,并通过google建议向用户显示实际数据(我是指建筑组件)
所以在onCreate中我正在呼叫
appUpdateViewModel = ViewModelProviders.of(this).get(AppUpdateViewModel.class);
fragmentMain = new FragmentMain();
setFragment(fragmentMain);
在FragmentMain中,我正在按照以下步骤显示嵌套的片段(组件或系统
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
...
((MainActivityPfff)getActivity()).setTextTabBar(getString(R.string.fragment_main_toolbar));
ViewPager viewPager = view.findViewById(R.id.viewPager);
viewPager.setAdapter(new AdapterPagerMain(getActivity(),getFragmentManager()));
...
}
此代码用于AdapterPagerMain
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new FragmentComponents();
} else if (position == 1) {
return new SystemFragment();
} else {
return new SystemFragment(); //notUsing
}
}
这是FragmentComponents的代码(ComponentsFragment结构相同,但是显示了另一个数据)
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
...
appUpdateViewModel = ViewModelProviders.of(this).get(AppUpdateViewModel.class);
appUpdateViewModel.getAllAppUpdates().observe(this, new Observer<List<AppUpdate>>() {
@Override
public void onChanged(@Nullable List<AppUpdate> appUpdates) {
adapterUpdates.setUpdates(appUpdates);
}
});
...
}
当我显示FragmentMain时,我可以单击按钮并转到新的Fragment(例如FragmentAboutApp),所以我这样做是这样的:
@Override
public void onClick(View view) {
((MainActivity)getActivity()).setFragment(new FragmentAboutApp());
}
所以,我遇到的第一个问题是-当我单击FragmentAboutApp中的按钮时,它显示FragmentMain,我正在获取FragmentMain,但没有任何内容(在FragmentComponents和FragmentSystem中,我有recyclerViews,即从数据库获取信息)
我也不知道获取实际数据的正确方法(我的意思是在所有片段中创建新的appViewModels并观察数据)。我想知道内存泄漏
我也想知道使用嵌套片段。我应该重新创建吗?我需要将性能提高到最高水平。或者也许我需要在删除新旧片段时删除它的旧实例? (请显示代码,我该怎么做)
最后一个问题-我正在从服务器大json文件下载一些信息:
我在不同片段中使用了这些信息的不同部分(但我只下载一个文件)
因此,现在我在MainActivity中连接到服务器,并在MainActivity生命周期中获取实际的json。片段只是在该数据库上观察,然后改变,它们显示了实际信息
谢谢!