2016-11-13 2 views
0

У меня есть макет с TextView mainTextView.обновление вида из темы на Android

Мой файл активности выглядит примерно так:

public class SecondActivity extends AppCompatActivity { 

    private static Integer i = 0; 
    private TextView tv = null; 


    @override 
    public void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 

     tv = (TextView) findViewById(R.id.mainTextView); 

     new MyThread().execute(); 
    } 


    private void notifyAChange() { 
     tv.setText(i.toString()); 
    } 



    private class MyThread extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground (String... params) { 

      while (true) { 

       try { 
        i++; 
        Thread.sleep(1000); 
        notifyAChange(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

Это возвращает к неустранимым во время выполнения. Я знаю, что не могу прикоснуться к представлению из другого потока, кроме оригинала, но в этом случае я касаюсь представления из основного потока, так что что не так?

+0

Пожалуйста, всегда обеспечивают полные исключения и трассировки стека! –

ответ

1

Нет, вы находитесь в doInBackground часть AsyncTask (рабочий поток).
Вы вызываете notifyAChange() форму рабочего потока, а не основной поток пользовательского интерфейса.
Вы должны обновить пользовательский интерфейс от onPostExecute. Или вы можете использовать runOnUiThread для части, обновляющей представление.

0

Главное использование asyncktask для выполнения задачи с длительным запуском, поэтому есть три метода preExecute, чтобы установить индикатор выполнения перед началом выполнения задачи, doinbackground для выполнения задачи, такой как данные загрузки (основной поток), выполнить пост для выполнения задачи после завершения задачи вы можете только изменить компонент пользовательского интерфейса после выполнения Post при использовании asynctask. Для получения дополнительной информации, связанной с asynktask см https://developer.android.com/reference/android/os/AsyncTask.html и осуществления и пояснения см AsynkTask ImplementationUpdate UI from Thread вы также можете использовать метод therad RunonUI и Handler

Смежные вопросы