私のアプリケーションでこのポストと同じメニューを使用しています...私はメニュー項目を表示するためにギャラリービューを使用しています。アンドロイドの "onItemSelected()"機能で遅延を設定する方法は?
問題は、新しいアイテムがロードされ、そのトピックに関連するデータを選択されたときに私は、ギャラリーのためonItemSelected
リスナーを実装する、ということです。 しかし、私はまた、ユーザーがギャラリーを完全にスクロールできるようにしたいと思っています。しかし、次の項目に移動するたびにonItemSelected()
関数が呼び出され、データのロードが開始されます。
私がしたいのは、onItemSelected()
の機能に遅延を入れることです。その遅延の間に次の項目をスクロールすると、前回のデータを読み込む必要はありませんが、現在のデータが読み込まれます。時間は1秒です。ユーザーが1秒で次のアイテムに行くことができない場合は、そのアイテムのデータをロードする必要があります。
誰でも手助けできますか?私は
public class TimerThreadForCategoriesMenu extends Thread{
int old = -1;
int cur = -1;
CategoriesActivity catAct = null;
public TimerThreadForCategoriesMenu(CategoriesActivity act , int cu) {
this.cur = cu;
old = cu;
this.catAct = act;
}
@Override
public void run() {
Looper.prepare();
do{
old = this.cur;
for(int i = 0; i<15; i++){
try{
Thread.sleep(100);
}catch (Exception e) {
e.printStackTrace();
}
}
}while(cur != old);
catAct.performTask();
Looper.loop();
}
public void setCur (int curr){
this.cur = curr;
}
}
そしてOnItemSelected()
if(timer == null){
timer = new TimerThreadForCategoriesMenu(this, arg2);
timer.start();
}
timer.setCur(curInd);
見つかり例外ではあまりにもこれを試してみました
...私はスレッドを開始すると思ったが、onItemSelected()
のためのたびに新しいスレッドがあるでしょう。
11-24 16:48:50.046:ERROR/AndroidRunti (8049):Uncaughtハンドラ:スレッドキャッチされていない例外のためスレッド8が終了する
11-24 16:48:50.126:ERROR/AndroidRuntime(8049):android.view.ViewRoot $ CalledFromWrongThreadException:ビュー階層はそのビューに触れることができます。
11-24 16:48:50.126:ERROR/AndroidRuntime(8049):android.view.ViewRoot.checkThread(ViewRoot.java:2683)
11-24 16:48:50.126:ERROR/AndroidRuntime(8049) :android.view.ViewRoot.invalidateChild(ViewRoot.java:570)
11-24 16:48:50.126:ERROR/AndroidRuntime(8049):android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:596)
11-24 16:48:50.126:ERROR/AndroidRuntime(8049):android.view.ViewGroup.invalidateChild(ViewGroup.java:2396)で
11-24 16:48:50.126:ERROR/AndroidRuntime(8049): android.view.View.invalidate(View.java:4945)
11-24 16:48:50.126:ERROR/AndroidRuntime(8049):
大丈夫です。あなたがする必要があるのは、UIコンポーネントにUIコンポーネントを更新するためにRunnableをUIスレッドに投稿できるように、アクティビティでHandlerを作成することです。 – techiServices
また、スレッドループをdo..while(これはlooper.prepareの処理がしているものです)と一緒にしない方が良いでしょう。スレッドに別のハンドラを作成し、そのスレッドにRunnableをポストします。 – techiServices
私は理解できません。いくつかのコードを記述できますか? – Arslan