【发布时间】:2010-11-24 05:48:13
【问题描述】:
我正在我的应用程序中使用与这篇文章相同的菜单...我正在使用图库视图来显示我的菜单项。
问题是,我为画廊实现onItemSelected 侦听器,以便在选择新项目时加载与该主题相关的数据。 但我也希望允许用户完全滚动图库。但是每次当用户移动到下一个项目onItemSelected() 函数时,它就会开始加载数据。
我要做的就是在onItemSelected() 函数中添加一些延迟,这样如果在该延迟之间,用户滚动下一个项目,则不需要加载前一个数据,而是加载当前数据。时间可能是 1 秒。如果用户在 1 秒内没有进入下一个项目,则必须加载该项目的数据。
有人可以帮忙吗?本来想开个帖子的,但是每次onItemSelected()都会有新的帖子……
我也试过了
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);
发现异常:
11-24 16:48:50.046:错误/AndroidRuntime(8049):未捕获的处理程序:线程 Thread-8 由于未捕获的异常而退出
11-24 16:48:50.126: ERROR/AndroidRuntime(8049): android.view.ViewRoot$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能触摸其视图。
11-24 16:48:50.126:错误/AndroidRuntime(8049):在 android.view.ViewRoot.checkThread(ViewRoot.java:2683)
11-24 16:48:50.126: 错误/AndroidRuntime(8049): 在 android.view.ViewRoot.invalidateChild(ViewRoot.java:570)
11-24 16:48:50.126: 错误/AndroidRuntime(8049): 在 android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:596)
11-24 16:48:50.126: 错误/AndroidRuntime(8049): 在 android.view.ViewGroup.invalidateChild(ViewGroup.java:2396)
11-24 16:48:50.126: 错误/AndroidRuntime(8049): 在 android.view.View.invalidate(View.java:4945)
11-24 16:48:50.126: 错误/AndroidRuntime(8049): 在
【问题讨论】:
-
好的,差不多了。您需要做的是在 Activity 中创建一个 Handler,以便您可以将 Runnable 发布到 UI 线程以更新 UI 组件。
-
最好不要让线程循环与 do..while (这就是 looper.prepare 的东西所做的)。在您的线程中创建另一个处理程序并向其发布 Runnable。
-
我听不懂。你能放一些代码吗?
-
好的。我会编辑我原来的答案。
-
希望代码更有意义。 ;D
标签: java android android-activity