Android:将布局膨胀为片段,但onCreate不会启动

问题描述 投票:1回答:1

我正在尝试在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设计中定义的,但是我无法对其进行交互(查询未处理,因此布局中的字段不会填充一个事件按钮未调用等)。我在哪里做错了?预先感谢。

android android-fragments android-tablayout android-inflate fragment-oncreateview
1个回答
0
投票

如果我是正确的,您想将在BrowseInner中获得的数据放入两个片段的字段中?

通常,您做错了所有事情。

您没有有意义的名称,例如Br​​owseInnerActivity,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等。

© www.soinside.com 2019 - 2024. All rights reserved.