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