Разработка пользовательского интерфейса Android: текст в Textview не меняется

#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);
    }