フォトアルバムをフリックするように、一連の写真をフリックするアプリを設計しています。かなり標準的なものだと思います。次の写真に自動的に変わる前に、写真を数秒間表示する必要があるため、写真を表示するスレッドを作成し、数秒待ってから次に進むことにしました。
Picthread(ImageView Image1) {
this.image = Image1;
}
public void run(){
showPicture(image);
animal_array = new String[7];
while (counter < 7){
try{
int timer = 0;
while (timer < 2000){
sleep(500);
timer+=500;
}
image.post(new Runnable(){
public void run() {
showPicture(image);
}
});
}
catch (InterruptedException e) {
}
}
}
これは実際に機能しました。showPicturesは、画像を選択してImageViewに配置するだけの非常に簡単な方法です。私の問題のためにそれについて知る必要はありません。最初は機能しませんでしたが、logcatは、このスレッドで作成されなかったビュー階層のビューに触れることができないと言いました。それが何を意味するのかわからなかったので、
image.post(...)
コード。どちらがうまくいったか。私の主な質問は、なぜこれが必要だったのかということです。上記のコードを見ると、最初のshowPicture()メソッドはimage.post()コード内にありません。ただし、例外は登録されていません。わかりませんが、なぜ投稿が必要ないのですか?しかし、Imageはクラス変数であり、すべてのスレッドで表示できると思ったので、なぜ投稿する必要があるのでしょうか。私はそれがうまくいったことを嬉しく思いましたが、戸惑いました。
覚えておいてください。これは、些細な教科書の例以外のものをJavaでスレッド化する最初の試みです。だから私はまだかなり混乱しています。
ちなみに、結局、スレッド全体を捨てて、
new Thread(new Runnable() {
public void run() {...}