1

我正在尝试在 android 中使用 Fragments。

因此,在“TabAdapter”类的方法“getItem()”中,我有:

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 设计中定义的,但我无法与之交互(查询未处理,因此布局中的字段未填充,按钮上的事件未调用等等...)我在哪里做错了?提前致谢。

4

1 回答 1

0

如果我是正确的,您是否要将在 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,它在两个 Fragment 之间共享。ViewModel 可以持有对某些 Repository 的引用并更新 LiveData 对象本身。然后 Fragments 可以观察 LiveData 并对数据做他们需要做的事情。有很好的设计指南:

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

以下是一些示例应用程序:

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

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

于 2019-10-08T12:35:43.203 回答