#android
#Android
Вопрос:
Прямо сейчас у меня есть XML-файл, в котором есть TableLayout внутри LinearLayout. Внутри TableLayout находятся TableRows с кнопками. В моем Java-коде я создаю setOnClickListener для каждой кнопки.
Проблема в том, что у меня есть несколько подобных XML-файлов, которые абсолютно одинаковы, за исключением того, что в xml идентификатор и текст разных кнопок отличаются.
Таким образом, один файл будет
<Button android:id="@ id/one" android:text="one" />
<Button android:id="@ id/two" android:text="two" />
и другой файл, который будет
<Button android:id="@ id/three" android:text="three" />
<Button android:id="@ id/four" android:text="four" />
В Java в одной части инструкции switch / case у меня есть случай, который:
setContentView(R.layout.a);
Button bOne = (Button) findViewById(R.id.one);
Button bTwo = (Button) findViewById(R.id.two);
и еще у меня есть:
setContentView(R.layout.b);
Button bThree = (Button) findViewById(R.id.three);
Button bFour = (Button) findViewById(R.id.four);
Избыточность распространяется на более чем два XML-файла, это всего лишь пример.
Есть ли какой-либо способ сделать это и не иметь нескольких файлов макета, но сделать все это в одном файле макета? Все XML-файлы абсолютно одинаковы, за исключением идентификаторов и текстовых частей кнопок.
Мне действительно все равно, как это делается — на Java, в xml или как угодно. Просто я время от времени вношу небольшие изменения в макет и не хочу продолжать настраивать каждый файл с точно таким же макетом, но для идентификаторов кнопок и текстов. Я хотел бы настроить макет один раз и заставить его работать во всех них при изменении макета. Если мне нужно поместить весь файл макета на Java, это было бы прекрасно.
Ответ №1:
просто сохраните один XML-файл (a.xml ). допустим, идентификаторами двух кнопок являются id1
и id2
. используйте setContentView(R.layout.a);
. Далее объявляются 2 кнопки say b1
и b2
. установите b1 = (Button) findViewById(R.id.id1)
и b2 = (Button) findViewById(R.id.id2)
. поместите setOnClickListener
для кнопок в корпус переключателя
Комментарии:
1. Ах, это сработало чудесно. Я изменил идентификаторы на общие, как вы предложили, и объявляю в Java общие. Я также добавляю setText в Java к кнопкам. Это работает отлично. Я предполагаю, что именно так я буду поступать впредь — статический макет в xml-файлах, если что-то в них динамическое, я идентифицирую это и выполняю все динамические операции в коде Java. Спасибо!
Ответ №2:
Если это всегда только эти две кнопки, у вас может быть переменная, отслеживающая произвольный int, который представляет, на каком экране вы находитесь. Оставьте те же кнопки, измените их параметры текста / компоновки и с помощью метода OnClick () протестируйте эту переменную, чтобы увидеть, на каком экране вы находитесь.
Ответ №3:
Почему бы просто не потерять XML-файлы и просто не сделать все это динамическим. Вы можете делать в коде все, что вы можете в xml. Вот руководство: Руководства по динамическому макету