【问题标题】:How can i use Multiple layout with same ID's in a Single fragment using ViewBinding in Android如何在 Android 中使用 ViewBinding 在单个片段中使用具有相同 ID 的多个布局
【发布时间】:2020-09-21 06:40:23
【问题描述】:

下面的代码根据条件检查返回任意布局,两个布局的id相同, 那么在这个布局中如何处理Textview setText() 或Button onClick() 场景使用ViewBinding。

例如,假设我们在那个膨胀的布局中使用了任何 Textview setText(" "),那么我怎样才能得到哪个布局对象名称(bindingbinding1)应该设置Textview的值。

代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
    View view;

    FirstLayoutBinding binding = FirstLayoutBinding.inflate(inflater,container,false);
    SecondLayoutBinding binding1 = SecondLayoutBinding.inflate(inflater,container,false);
    
    if (isTrue){
        view = binding.getRoot();
    }else  {
        view = binding1.getRoot();
    }
  
    return view;
}

【问题讨论】:

  • 是否能够根据条件检查为任何布局充气?如果是,您是想说如何在其中一种膨胀布局中的 TextView 上设置文本()?您能否详细说明您要实现的目标。
  • @Rajasekhar 正是你说的,但我需要知道,如何在 Textview 上实现这个 setText() ,它以一种布局呈现,使用 Android ViewBinding 概念。上面可以看到两个布局,但是如何在选中的布局上实现setText()。
  • 检查我的答案,让我知道它对你有什么好处。
  • @MohamedTharik 你能找到任何解决方案吗?我身边也有同样的用例
  • @MohamedTharik 你能找到任何解决方案吗?我身边也有同样的用例

标签: android fragment android-viewbinding


【解决方案1】:

好吧,我们假设根据您的条件检查 fragment 将膨胀 SecondLayoutBindinglayout。

现在您在布局中有两个不同的TextViews

second_layout.xml 中有TextViewandroid:id 属性值second_text

first_layout.xml 中有TextViewandroid:id 属性值first_text

一旦fragmentonCreateView() 中完成膨胀并带有条件。让我们将文本值设置为仅膨胀布局的TextView

所以现在我们使用绑定 SecondLayoutBinding 进行膨胀,我们应该在 onViewCreated() 中使用 id second_text 的布局内 setText()

onViewCreated()

if (!isTrue) {
    binding1.secondText.setText("MySecondValue");
} else {
    binding.firstText.setText("MyFirstValue");
}

您再次需要做的一件事是,您必须再次检查您尝试调用哪个视图的 ID 以设置它的值。如果 first_layout 被夸大了,您就不能在 second_layout 中为视图或 TextView 设置值,反之亦然。

【讨论】:

  • 谢谢,但该条件仅用于布局膨胀。我想要给出示例场景。让我们假设根据您的条件检查片段将膨胀 SecondLayoutBindinglayout。现在您在布局中有两个不同的 TextView,但 id 相同。在 second_layout.xml 中,您有带有 android:id 属性值 common_text 的 TextView,在 first_layout.xml 中,您有带有 android:id 属性值 common_text 的 TextView。一旦片段在 onCreateView() 中使用条件完成膨胀。我们只将文本值设置为那个膨胀的布局 TextView。无需同时编写绑定和绑定1
  • 我完全理解这里的情况。我再次检查条件,因为片段只会绑定对膨胀布局视图的引用。仅仅因为两个不同布局中的两个不同 TextView 的 id 相同,所以遵循这种方法是一个很好的做法,这样即使您提供不同的 id 并在其中包含不同的小部件,应用程序也不会崩溃。如果布局仅限于相同的视图并且只有这些文本视图,那么这将不是那么必要。你可以用不同的方式测试代码,看看哪个效果最好,但我还是会写一个条件。
猜你喜欢
  • 2014-11-02
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多