Android Ui поток в цикле
ПРОБЛЕМА
У меня почти 20 TextView
и мне нужно что-то сделать, чтобы их цвет фона изменялся динамически.
Например: все TextView
будет иметь тот же цвет фона по умолчанию, после чего через 5 секунд первый цвет станет красным, тогда как другие останутся такими же, затем через 5 секунд TextView
цвет фона будет установлен по умолчанию и второй TextView
's цвет фона станет красным и будет продолжаться вот так.
Я пытался поместить их в цикл for в потоке и обработчике, но они изменили все вместе. Что я должен делать?
Я пробовал этот код
Thread color=new Thread() {
public void run() {
for(int i=2131230724;i<=2131230742;i++){
TextView currentText = (TextView) findViewById(i);
currentText.setBackgroundColor(Color.RED);
try {
sleep(2000);
currentText.setBackgroundColor(Color.TRANSPARENT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
тогда я использовал
mHandler.post(color);
РЕШЕНИЕ
Я нашел решение для моей проблемы и поделился, если кому-то еще нужно.
Runnable myhandler=new Runnable() {
int id=2131230724;//First textView id
@Override
public void run() {
// TODO Auto-generated method stub
if(id==2131230724){
TextView currentText=(TextView)findViewById(R.id.egzersiz01_kelime1);
currentText.setBackgroundColor(Color.RED);
id++;
}
else if(id==2131230725){
TextView currentText=(TextView)findViewById(R.id.egzersiz01_kelime2);
currentText.setBackgroundColor(Color.RED);
TextView PreText=(TextView)findViewById(R.id.egzersiz01_kelime1);
PreText.setBackgroundColor(Color.TRANSPARENT);
id++;
}//And all other id's to else if as same as mine.
mHandler.postDelayed(myhandler, delay);
и в onCreate()
myhandler.run();
Я попытался использовать цикл for, чтобы упростить его, но он потерпел крах, и мне пришлось написать их все. Спасибо за помощь...
1 ответ
Вы можете поместить параметры в AsynTask, как это, а затем
new changeColor().execute(max);
private class changeColor extends AsyncTask<Integer,Integer,Void>{
int max,cur;
@Override
protected void onPreExecute() {
max=cur=0;
super.onPreExecute();
}
@Override
protected Void doInBackground(Integer... number) {
int max=number[0];
int cur=1;
if(max>0)
while(true ){/*or other condition else*/
try {
Thread.sleep(5000);//Sleep 5000s before make change
} catch (InterruptedException e) {
Log.i("TAG","InterruptedException");
}
publishProgress(cur);
if(cur==max)
cur=1;
else
cur++;
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
changeColorTextView(values[0]);
super.onProgressUpdate(values);
}
private void changeColorTextView(int textViewId){
switch(textViewId){
case textId1:{
//do some thing here like:
//textView2.setBackGroundColor(R.color.RED);
//textView1.setBackGroundColor(default);
break;
}
//....
}
}
}