0

我在 RecordTable 类中定义了这个方法,它不是一个 Activity。
我从主 UI 线程调用它并将有效的 UI 线程上下文作为参数传递。
当然,它不适用于消息:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我在其他帖子中看到他们建议使用runOnUiThread而不是,new thread但由于该类不是活动runOnUiThread,因此不可用。

在 runnable() 之外启动 Dialog 也不起作用。

有没有人遇到这个问题并找到解决方法?

public synchronized void scrollUp(final Context context, final ArrayList<Record> list, final int count) {
    new Thread(new Runnable() {
        public void run() {
            setScrolling(true);
            ProgressDialog pd = ProgressDialog.show(context, "", context.getResources().getString(R.string.loading_msg), true);
            int n = Math.max(mViewStartIndex - count, 0);
            for(int i = mViewStartIndex - 1; i >= n; i--) {
                RecordTable.this.addFirstRow(list.get(i));
                RecordTable.this.removeViews(RecordTable.this.getChildCount() - 1, 1);
            }
            pd.dismiss();
            setScrolling(false);
        }
    }).start();
}
4

2 回答 2

2

鉴于我建议使用AsyncTask的代码。查看 AsyncTask 的文档。

在函数中的不同线程上执行您想要的工作,doInBackground(....)并定期调用progressUpdate,它始终在 UI 线程上运行。实现起来要简单得多,您不必担心创建新线程。AsyncTask 为您完成。

于 2012-06-06T13:54:45.740 回答
0
ProgressDialog pd;
Context context;

public synchronized void scrollUp(Context context, final ArrayList<Record> list, final int count) {
this.context = context;
new Thread(new Runnable() {
public void run() {
    setScrolling(true);
    hand.sendEmptyMessage(0);                
    }
  }
}).start();

int n = Math.max(mViewStartIndex - count, 0);
for(int i = mViewStartIndex - 1; i >= n; i--) {
RecordTable.this.addFirstRow(list.get(i));
RecordTable.this.removeViews(RecordTable.this.getChildCount() - 1, 1);

pd.dismiss();
setScrolling(false);
}


Handler hand = new Handler() 
{
    @Override
    public void handleMessage(Message msg) 
    {
              pd = ProgressDialog.show(context, "", context.getResources().getString(R.string.loading_msg), true);
    }
}

试试这个它可能对你有帮助......如果你想在类处理程序中创建任何对话框或 Toast 将处理这个......

于 2012-06-06T13:48:29.213 回答