当前位置: 首页 > 知识库问答 >
问题:

Android数据绑定使片段全屏显示,中断导航

邵毅
2023-03-14

我有一个活动应用程序,底部有导航标签,使用Android架构导航组件。

以下是其中一个片段的代码:

public class ProfileFragment extends BaseFragment {

    private final int layout = R.layout.fragment_profile;
    //private final int layout = R.layout.fragment_profile_;

    private ProfileViewModel mViewModel;
    //  FragmentProfileBinding mBinding;

    public static ProfileFragment newInstance() {
        return new ProfileFragment();
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        return inflater.inflate(layout, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mViewModel = ViewModelProviders.of(this, viewModelFactory).get(ProfileViewModel.class);

//        mBinding = DataBindingUtil.setContentView(getActivity(), layout);
//        mBinding.setLifecycleOwner(this);
//        mBinding.setVm(mViewModel);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ((mcApplication) getActivity().getApplication())
                .getApplicationComponent()
                .inject(this);
    }
}

它有两个可能的版本(一个是带有数据绑定的版本,注释为)。

没有数据绑定的当前版本可以正常工作,但是有数据绑定的版本会全屏显示片段,而不是在androidx中显示片段。航行碎片这是我主要活动的一部分。数据绑定是有效的,我的问题是片段全屏显示,试图通过编程从该片段导航是无效的。所以在这种情况下,数据绑定破坏了一切。我做错了什么?

以下是fragment_profile_. xml文件的内容:

    <?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    >
    <data>
        <variable
            name="vm"
            type="com.synergy.megacampus3.viewmodel.ProfileViewModel" />
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
                <TextView
                    android:id="@+id/username"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginLeft="8dp"
                    android:layout_marginTop="16dp"
                    android:layout_marginEnd="8dp"
                    android:layout_marginRight="8dp"
                    android:text="@={vm.fullUserName}"
                    android:textColor="@color/mc_text_color_1"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/avatar"
                    tools:textSize="16sp" />

    </LinearLayout>
</layout>

共有1个答案

韦欣德
2023-03-14

我的问题是,我在错误的地方和错误的方式初始化绑定。工作代码如下:

public static ProfileFragment newInstance() {
    return new ProfileFragment();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ((mcApplication) getActivity().getApplication())
            .getApplicationComponent()
            .inject(this);
    mViewModel = ViewModelProviders.of(this, viewModelFactory).get(ProfileViewModel.class);
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {

    mBinding = DataBindingUtil.inflate(
            inflater, layout, container, false);
    View view = mBinding.getRoot();
    mBinding.setLifecycleOwner(this);
    mBinding.setVm(mViewModel);

    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

代码取自这里

 类似资料:
  • 我正试图在现有的应用程序中实现新的Android导航组件。我有两个片段除了名字外都是一样的。当我将startDestination设置为fragment2时,片段似乎显示正确。当startDestination设置为fragment1时,我看不到膨胀的视图,但我确实看到了“Fragment 1 created”toast。 我做错了什么? 导航图。xml 主活动布局: Fragment1布局: 依

  • 我试图遵循官方google文档https://developer.android.com/tools/data-binding/guide.html中的数据绑定示例 只是我试图将数据投标应用于一个片段,而不是一个活动。 我当前在编译时遇到的错误是 我怀疑不知道它应该绑定到哪个布局文件-因此出现错误。有什么建议吗?

  • 我对kotlin相对较新,并试图在一些片段中构建一个带有数据绑定的项目。我有一个名为UserFraank的片段,其中包含一个Recyclview,如下所示: 以及用户的xml布局文件片段。xml如下所示: 还有一个类似的适配器类和item_user.xml: item-user.xml: 请注意,gradle中已经启用了数据绑定,这里非常重要的问题是,在我的片段和适配器中,这一行: 报告类型不匹配

  • 8.3.3 打印输出的中断功能 打印输出是一种硬拷贝输出,也是一种常用的输出形式。随着计算机应用领域的不断扩大,外围设备的重视程度也越来越高。目前,打印机的种类已日益丰富,有针式打印机、喷墨打印机和激光打印机等。从打印色彩来看,既有普通的黑色打印,也有彩色打印。总之,计算机打印输出的品质是越来越高。 1、打印机状态字 打印机状态字记录着打印机的当前工作情况(或状态),它相当于CPU中的程序状态字和

  • 我正在开发包含2个片段的应用程序,我想根据需要显示隐藏。下面的代码有一个简单的例子来说明我的问题。这个简单的Fragmentactivity包含一个按钮和一个listfragment。 这个简单的例子完美无瑕。但我不满足于展示隐藏片段。如果删除布局。设置可见性(View.GONE);然后从代码中选择ft.hide(f);不会隐藏碎片。事实上,我们不是在隐藏片段,而是在隐藏容器。 我的问题是,这是一

  • 问题内容: <%= image_tag "Background.jpg" %> 我如何使上述代码全屏显示Twitter Bootstrap模态弹出窗口,我尝试使用CSS,但无法按照我想要的方式获得它。任何人都可以帮我。 问题答案: 我在Bootstrap 3中使用以下代码实现了这一目标: 通常,如果您对间距/填充问题有疑问,请尝试右键单击(或在Mac上按cmd键单击),然后在Chrome上选择“检