char (mCharArray) の配列と、画面全体のサイズである 1 つの textView (tvChar) があるとします。ユーザーが画面 (tvChar) をクリックすると、textView は charArray 内の各文字を表示しますが、各反復で 1 秒の遅延が必要です。これを達成する方法は?
これは私が持っていた現在の解決策です。このコード スニペットは、fragment の 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);
}
});
}
更新:すべての回答に感謝します.
私は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();
}
});
runnable を実装する内部クラスを作成します。
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();
}
}
}
}