Обновление Textview из функции Android - PullRequest
3 голосов
/ 26 ноября 2010

кто-нибудь может подсказать, как обновить элемент управления Textview Android из функции?Я глубоко заглянул в интернет и вижу много людей, которые задают один и тот же вопрос, я проверял темы, но не мог работать, у кого-то есть простой рабочий пример этого?например, для вызова функции (которая запускается несколько раз в цикле) и запись функции в TextView, но проблема заключается в том, что пока функция не завершится, она показывает мне текст.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    while(condition) //here freezes the UI and the text in textview only shows when the loop ends
    {
        HardWork();  
    }

}

public void HardWork() {  

    txtProgreso.append("Test Line" + "\n\n");

};

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 26 ноября 2010

Если я вас правильно понял
Используйте AsyncTask здесь, так что вы можете обновить текстовое представление в методе onProgressUpdate

private class SomeTask extends AsyncTask<String, String, String> {
    @Override
        protected String doInBackground(String... params) {
         while(condition) {
         //do more
         publishProgress("Some text value to you textview");
        }
         return null;
     }

     @Override
     protected void onProgressUpdate(String... values) {
         txtProgreso.append(values[0]);
     }


 }
3 голосов
/ 26 ноября 2010

Я думаю, что вы пытаетесь спросить: «Как заставить мой TextView показывать его обновленное содержимое без возврата контроля в runloop?» (т.е. возвращение из вашей функции).

Если это так, я боюсь, что вам не повезло, такое невозможно сделать с моделью пользовательского интерфейса Android. Самое близкое к этому, что возможно, это отслеживать состояние вашего цикла и установить таймер, который будет вызывать функцию для вас, чтобы обновить TextView.

Вот пример. Предположим, вы хотите поместить текст «это тест» в TextView, по одному символу за раз:

private Handler mHandler = new Handler();
private String desiredText = new String("This is a test");

private Runnable mUpdateTextView = new Runnable() {
  public void run() {
    TextView textView = (TextView)findViewById(R.id.myTextView);
    int lengthSoFar = textView.getText().length();
    if (lengthSoFar < desiredText.length()) {
      mTextView.setText(desiredText.substring(0, lengthSoFar + 1));
      mHandler.postDelayed(100, mUpdateTextView);
    }
  }
};

protected void onStart() {
  mHandler.postDelayed(100, mUpdateTextView);
}

Я думаю, что некоторые из моих объектов видимости здесь неправильные, и у меня нет среды Android, удобной для тестирования, но вы понимаете общее представление. Вместо обработчика вы также можете использовать таймер, но он немного тяжелее, поэтому зависит от того, как часто вы хотите обновлять пользовательский интерфейс.

1 голос
/ 26 ноября 2010

Текстовое представление можно получить, выполнив следующее.

TextView myTextView = (TextView)findViewById(R.id.textViewsId);

Затем вы можете изменить TextView, используя функции. Например, вы можете установить текст, используя следующий код.

myTextView.setText("New text example");

Существуют ли другие обновления для элемента управления, который вы пытаетесь сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...