Android:将布局膨胀为片段,但在创建时不启动



我正在尝试在安卓中使用片段。

所以在方法"getItem(("进入类"TabAdapter"中,我有:

public Fragment getItem(int position) {
switch (position) {
case 0:
Browse tab1 = new Browse();
return tab1;
case 1:
Create tab2 = new Create();
return tab2;
default:
return null;
}
}

因此,在"浏览"类中,我使用膨胀将我要使用的布局放入 TabLayout 片段中:

public class Browse extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_browse, container, false);
return rootView;
}

在此类中,具有方法"onCreate(("的内部类

public class BrowseInner extends AppCompatActivity{
DBManager db = new DBManager(this);
DBManager.DatabaseHelper dbh = new DBManager.DatabaseHelper(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("TRYTOSTAMP");
setContentView(R.layout.activity_browse);
Cursor cursor = dbh.giveAllItemFromDB();
... //"and all the logics to interact with layout"...
}

但是,通过这种方式,我只有片段 TabLayout 中的布局,因为它在.xml设计中定义,但我无法与之交互(查询未处理,因此布局中的字段未填充,按钮上的事件未调用等等...... 我哪里做错了? 提前谢谢。

如果我是对的,你想把你在BrowseInside中获得的数据放到两个片段的字段中吗?

总的来说,你做错了一切。

您没有有意义的名称,例如BrowseInnerActivity,BrowseFragment和CreateFragment

你可以这样返回。无需分配。

public Fragment getItem(int position) {
switch (position) {
case 0:
return new Browse();
case 1:
return new Create();
default:
return null;
}
}

为什么要在活动和片段中膨胀相同的布局?即使视图应该相同,您也需要创建单独的布局并相应地命名它们。你不能在片段中膨胀:R.layout.activity_browse

以上是基本编程。您的设计不正确。活动和片段是 MVP、MVVM 等方面的"视图"。他们需要被动。仅显示一些数据并通知某些内容,例如 ViewModel 有关对其执行的某些操作。

因此,在您的情况下,活动只能创建片段。您可以创建一个视图模型,该模型在两个片段之间共享。ViewModel 可以保存对某些存储库的引用,并更新 LiveData 对象本身。然后,片段可以观察实时数据并处理他们需要执行的数据。有很好的设计指南:

https://developer.android.com/jetpack/docs/guide

下面是一些示例应用:

https://github.com/android/architecture-samples

一般来说,你应该了解什么是MVVM,ViewModel,LiveData等。

最新更新