Как я могу использовать несколько макетов с одинаковыми идентификаторами в одном фрагменте, используя привязку к просмотру в Android

#android #fragment #android-viewbinding

#Android #фрагмент #android-привязка к просмотру

Вопрос:

Приведенный ниже код для возврата любого макета на основе проверки условий, и оба макета имеют одинаковые идентификаторы, затем как обработать сценарий Textview setText () или Button onClick() в этом макете с использованием привязки к просмотру.

Например, предположим, что мы использовали any Textview setText(» «) в этом раздутом макете, тогда как я могу узнать, какое имя объекта макета (привязка или привязка1) должно быть установлено в качестве значения 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;
}
  

Комментарии:

1. Способны ли вы раздувать любой макет на основе проверки условий? Если да, вы пытаетесь сказать, как установить texText() в TextView, которые присутствуют в одном из этих раздутых макетов? Не могли бы вы подробнее рассказать о том, чего вы пытаетесь достичь.

2. @Rajasekhar точно вы говорите, но мне нужно знать, как добиться этого setText() в Textview, которые представлены в одном из этих макетов, используя концепцию привязки к просмотру Android. Выше вы можете увидеть два макета, но как добиться setText() для выбранного макета.

3. Проверьте мой ответ, дайте мне знать, как это работает для вас.

4. @MohamedTharik смогли ли вы найти какое-либо решение для вашего случая? у меня такой же usecase и на моей стороне

5. @MohamedTharik смогли ли вы найти какое-либо решение для вашего случая? у меня такой же usecase и на моей стороне

Ответ №1:

Хорошо, давайте предположим, что на основе вашей проверки условий fragment SecondLayoutBinding макет будет увеличен.

Теперь у вас есть два разных TextViews макета.

У second_layout.xml вас есть TextView android:id значение атрибута second_text

У first_layout.xml вас есть TextView android:id значение атрибута first_text

После fragment завершения раздувания onCreateView() с условием. Давайте установим текстовое значение только для раздутого макета TextView .

Итак, теперь мы раздули привязку SecondLayoutBinding , и мы должны setText() внутри этого макета ввести идентификатор second_text onViewCreated() .

onViewCreated()

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

Одна вещь, которую вам снова нужно сделать, это еще раз проверить, какой идентификатор представления вы пытаетесь вызвать, чтобы установить его значение. Если значение first_layout get завышено, вы не можете установить значение для представлений или TextView внутри second_layout и наоборот.

Комментарии:

1. Спасибо, но это условие используется только при раздувании макета. Мне нужен приведенный пример сценария. давайте предположим, что на основе вашей проверки состояния фрагмент будет раздувать SecondLayoutBindinglayout. Теперь у вас есть два разных текстовых представления в макетах, но с одинаковым идентификатором. В second_layout.xml у вас есть TextView с android: значение атрибута id common_text, в first_layout.xml у вас есть TextView с android: значение атрибута id common_text. Как только фрагмент завершит раздувание в onCreateView() с условием. мы устанавливаем текстовое значение только для этого завышенного текстового представления макета. Нет необходимости писать как привязку, так и привязку1

2. Я полностью понял этот случай. Я снова проверяю условие, потому что фрагмент будет привязывать ссылку только к представлению с раздутыми макетами. Просто потому, что идентификатор одинаков для двух разных текстовых представлений в двух разных макетах, рекомендуется следовать этому подходу, таким образом, приложение не будет аварийно завершать работу, даже если вы указываете разные идентификаторы и в нем разные виджеты. Если макет ограничен одними и теми же представлениями и только этими текстовыми представлениями, то это было бы не так уж и необходимо. Вы можете протестировать код по-разному и посмотреть, что работает лучше всего, но я бы все равно написал условие.