我正在尝试在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;
}
}
因此,在“浏览”类中,我使用inflate将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"...
}
但是,通过这种方式,我只有Fragment TabLayout中的布局,因为它是在.xml设计中定义的,但是我无法对其进行交互(查询未处理,因此布局中的字段不会填充一个事件按钮未调用等)。我在哪里做错了?预先感谢。
如果我是正确的,您想将在BrowseInner中获得的数据放入两个片段的字段中?
通常,您做错了所有事情。
您没有有意义的名称,例如BrowseInnerActivity,BrowseFragment和CreateFragment
您可以这样返回。无需分配。
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Browse();
case 1:
return new Create();
default:
return null;
}
}
您为什么要在Activity和Fragment中同时增加相同的布局?即使视图应该相同,您也需要创建单独的布局并相应地命名。您无法在Fragment中充气:R.layout.activity_browse
以上是基本编程。您的设计不正确。活动和片段是MVP,MVVM等方面的“视图”。它们必须是被动的。仅显示一些数据并通知某些内容,例如ViewModel有关对其执行的某些操作的信息。
因此,在您的情况下,活动只能创建片段。您可以创建一个ViewModel,该ViewModel在两个Fragment之间共享。 ViewModel可以保存对某些存储库的引用,并本身更新LiveData对象。然后,片段可以观察LiveData并处理数据,他们需要做什么。有相当不错的设计准则:
https://developer.android.com/jetpack/docs/guide
这是一些示例应用程序:
https://github.com/android/architecture-samples
通常,您应该了解什么是MVVM,ViewModel,LiveData等。