2013-09-29 2 views
0

Я пытаюсь реализовать Runnable в своем приложении, поэтому я начал с некоторой простой процедуры, но даже это ничего не отображает на TextView. Удивительно, но я переопределил объект run(), но он все еще не отображается.Сложность реализации интерфейса Runnable с Activity

package com.example.filer; 
public class Filesearcher extends Activity implements Runnable { 

TextView tvtis; 
Thread tr; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_filesearcher); 
    tvtis = (TextView) findViewById(R.id.tvfirst); 
    tr = new Thread(); 
    tr.start(); 
} 

@Override 
public void run() { 
    // TODO Auto-generated method stub 
    try { 
     Thread.sleep(5000); 
     tvtis.setText("Started"); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 
+0

Вы не должны быть пытаясь коснуться представлений из любого другого потока, кроме основного/потока пользовательского интерфейса. Если вы хотите обновить представление во время выполнения какой-либо работы или после завершения работы, используйте «AsyncTask». Я предлагаю вам [немного прочитать] (http://developer.android.com/guide/components/processes-and-threads.html#Threads). –

+0

Вы не можете получить доступ к элементам Ui в Android вне основной темы. –

ответ

0

Чтобы перевести Runnable на волоске: tr = new Thread(this);

Для переключения в поток пользовательского интерфейса от другого:

@Override 
public void run() { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(5000); 
       tvtis.setText("started"); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

Возьмите взгляд на documentation из runOnUiThread(Runnable)

+0

Yup the thread, который имеет только просмотр, может иметь доступ к это !! :) Я получил это, и поток работает отлично, я использовал обработчик для этого !! – user2828956

0

Вы не можете изменить интерфейс из потока, отличного от UI Thread. Средства - ваша тема, вероятно, работает нормально, но tvis.setText() не (изнутри этой темы). Попробуйте просто Log.d("tag", "does it work?"), чтобы узнать, работает ли ваш поток.

+0

Ваше право не показывает ничего, даже если теперь я применил решение, показанное @Shridhar. Пожалуйста, помогите, я работаю над этим с прошлой недели сейчас :(, но безрезультатно !! – user2828956

+0

Почему вы приняли ответ, если он не работает? – Ridcully

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