Допустим, у меня есть массив char (mCharArray) и один textView (tvChar), который является размером всего экрана. Я хочу, чтобы, когда пользователь нажимает на экран (tvChar), textView отображает каждый символ внутри charArray, однако он должен иметь как бы 1 секунду задержки на каждой итерации. Как это сделать?Как добавить некоторую задержку после каждой итерации массива, каждая итерация изменяет свойство вида. Android
Это текущее решение, которое у меня было. Этот фрагмент кода является частью onViewCreated фрагмента. Проблема заключается в том, что текст не обновляется, он работает только для последнего элемента массива char.
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tvChar = (TextView) view.findViewById(R.id.tv_char);
tvChar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// not sure how to pause after each iteration...
v.postDelayed(new Runnable() {
@Override
public void run() {
for (char element : mCharArray) {
synchronized (tvChar) {
tvChar.setText(String.valueOf(element));
tvChar.notify();
try {
tvChar.wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}, 1000);
}
});
}
UPDATE: Спасибо за ответы на все вопросы, хотя никто на самом деле не работает, когда я попробовал их, вы, ребята, помогите мне дать некоторую интуицию.
я в конечном итоге добавив обработчик потоков на OnCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mCharArray = getArguments().getCharArray(SENTENCE_KEY);
}
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
this.obtainMessage();
tvChar.setText(Character.toString((char)msg.arg1));
}
};
}
создать новую тему в setOnclickListener
tvChar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
thread = new Thread(new ChangeCharThread());
thread.start();
}
});
создает внутренний класс, который реализует работоспособной.
class ChangeCharThread implements Runnable{
@Override
public void run() {
Message msg = Message.obtain();
for (char ch : mCharArray){
msg.arg1 = ch;
handler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Брешь в это не на самом деле отменить обновление, потому что вы можете нажать кнопка очень быстро, и вы начнете публиковать много, много runnables, которые не могут быть отменены. Обычно вы просто создаете своего собственного обработчика. – DeeV