#android #user-interface #textview
#Android #пользовательский интерфейс #textview
Вопрос:
У меня возникли проблемы с пониманием того, как я должен организовать свой пользовательский интерфейс в Android. Мой первоначальный план состоял в том, чтобы создавать текстовые представления и ListViews программно и изменять их при нажатии кнопок и т.д.
Вот моя первая простая попытка. viewFriends — это метод в моем классе Activity. Он вызывается при нажатии кнопки меню.
private void viewFriends()
{
mText = new TextView(this);
mText.setText("Gathering information...");
setContentView(mText);
… далее следует нерелевантный код
Почему этот, казалось бы, простой пример не работает? Как я должен логически организовывать и управлять своими объектами пользовательского интерфейса (TextViews, ListViews, Buttons и т.д.).
Спасибо.
Комментарии:
1. Здесь
mText = new TextView(this);
вы получаете текстовое поле из XML-макета или пытаетесь создать его динамически.
Ответ №1:
Лучшей работой было бы иметь эти listviews и textviews в ваших XML-файлах и присвоить им подходящий идентификатор, например, следующий:
<ListView
android:id="@ id/myList"
android:layout_width="wrap_content"
android:layout_weight="1"
/>
Точно так же, как и выше, у вашего текстового представления тоже есть XML-файл, добавьте android:id
атрибут.
Как только вы определите этот способ в своем java-файле, у вас будут ссылки на них:
ListView myListObj = (ListView)findViewById(R.id.myList);
Теперь у вас есть объект с именем myListObj в вашем java-файле, и теперь вы можете делать с ним все, что захотите.
🙂
Сообщите мне, если вы обнаружите какую-либо проблему в этом, чтобы я мог обновить ответ в соответствии с вашими конкретными потребностями.
Комментарии:
1. Спасибо за ответ. Именно так я ранее организовал свой макет. Проблема, с которой я столкнулся, заключалась в невозможности программно изменить порядок отображения моих представлений. Например, я отображаю строку «Сбор информации», и после того, как информация собрана, я делаю эту строку невидимой и выводю listview, в котором содержится собранная мной информация, на передний план. Я попытался сделать это с помощью метода BringToFront (), но ничего не произошло.
2. Для этого просто создайте framelayout, а внутри framelayout есть два элемента, а именно. ваш textview для сбора информации и ваш listview после этого textview (убедитесь, что в вашем XML-файле вы установили для его видимости значение hidden). После завершения загрузки просто сделайте textview невидимым и сделайте listview видимым. Если это ваш случай, дайте мне знать, я могу предоставить пример кода.
Ответ №2:
Не используйте setContentView в своем методе. Обычно его следует вызывать только один раз в методе onCreate вашей активности. Лучше всего предварительно определить ваши bottons / TextViews в xml, получить для них дескриптор (findViewById …) и изменить их таким образом.
Если вы создаете их программно, просто добавьте их в контейнер представления из вашего xml. Нравится :
setContentView(R.layout.main);
Допустим, в main.xml существует LinearLayout с идентификатором: root.
// get accces to that layout:
LinearLayout rootLayout = (LinearLayout) findViewById (R.id.root);
// create a new TextView
TextView tv1 = new TextView (this);
tv.setText("Hello!");
// add it to your base layout
rootLayout.addView(tv1);
// done! :)
Ответ №3:
Дважды проверьте, что вы получаете в «этом». измените его на имя вашего файла Java.это
Ответ №4:
Вам нужно перезагрузить / обновить свою активность, как только вы ее измените.
Попробуйте это
@Override
protected void onResume() {
if(param.equalsIgnoreCase("gr"))
{
finish();
Intent myIntent = new Intent(yourActivity.this, yourActivity.class);
startActivity(myIntent);
}