Как я могу сделать TextView изменить текст во время выполнения? - PullRequest
1 голос
/ 03 февраля 2012

В настоящее время мой источник выглядит так

    System.out.println(text1+" "+text2); // displays the correct values.

    this.view1.setText(""+text1); // should display the same values
    this.view1.setText(""+text2); //

    ((Activity)getContext()).runOnUiThread(new Runnable()
    {
        public void run()
        { invalidate(); }
    });

Это часть метода, который вызывается другим объектом каждые 30 секунд. TextViews помещаются в LinearLayout.

Текст, который отображается при запуске, равен «0». Теперь я хочу, чтобы он менялся каждые 30 секунд для отображения заданного текста (например, «5» и «10»).

Кажется, что виды не перекрашиваются.

Я надеюсь прояснить это. Спасибо!

Ответы [ 5 ]

0 голосов
/ 04 февраля 2012

Реальный класс выглядит более сложным, но этот пример показывает мой (рабочий) ответ и должен прояснить, как он может работать.

public class MyObject extends LinearLayout<br />
{

    private TextView text1,text2;
    private String str_text1, str_text2;

    /* The constructor does the initialisation of all fields ... */
    public MyObject(Context context)
    { /* Initialisation ... */ }

    /*This method is called from outside by a thread to renew the displayed values.*/
    public final void method_A ()
    {
      ((Activity)getContext()).runonUIThread(
        new Runnable()
        {
              public void run()
              {
                  text1.setText(str_text1);
                  text2.setText(str_text2);
              }
        });
    }
    /* This method is called from outside by an object to initialize the two values */
    method_B(String str_text1, String str_text2)
    {
       this.str_text1 = str_text1;
       this.str_text2 = str_text2;
    }
}
0 голосов
/ 03 февраля 2012

вы можете использовать обработчик для обновления значений textview.

вызов обработчика со значением.

    Message m = new Message();
    m.what = -1;
    m.arg1 = remainTime;
handler.sendMessage(m);
 ******* Handler*****                                       
        public static Handler handler = new Handler() {
                public void handleMessage(Message msg) {

                    if (msg.what == -1) {

                        set_timer(msg.arg1);

                    }
        }
        };


        *********Updating Text***************

        public static void set_timer(int time) {

                if (time == 0) {

                    Toast.makeText(context, "Time Out...", Toast.LENGTH_SHORT).show();
                    System.exit(0);

                } else {
                    if (sec < 10)
                        timeindex.setText(time + " : 0" + sec + " of " + value[0]);
                    else
                        timeindex.setText(time + " : " + sec + " of " + value[0]);
                }

            }

Надеюсь, ты понял ....

0 голосов
/ 03 февраля 2012

Установка текста не должна требовать от вас аннулирования TextView для его изменения.

Вы уверены , хотите ли вы это сделать?

this.view1.setText(""+text1); // should display the same values
this.view1.setText(""+text2); //
0 голосов
/ 03 февраля 2012

На самом деле класс Context не имеет метода runOnUiThread, поэтому для выполнения этого метода вам необходим объект Activity. И вы должны вызвать метод textView.setText внутри метода runOnUiThread, чтобы он заработал. Надеюсь, это поможет.

0 голосов
/ 03 февраля 2012

возможно ваша ошибка зависит от неправильного типа объекта для "text1" и "text2". Являются ли эти переменные объектами String или Integer? если вы используете Integer (int) вам нужно преобразовать значения переменной в строку:

String str1 = String.valueOf(text1);
this.view1.setText(str1);

String str2 = String.valueOf(text2);
this.view2.setText(str2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...