0

我试图让 ProgressDialog 在显示它之前加载我的列表视图,但我遇到了崩溃。会有更好的方法来实现这一点吗?

编辑:更新了 logcat 错误,忘记了它。

List<String> internetArray = new ArrayList<String>();
    private ProgressDialog p;

@Override
public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            ListView internetList = (ListView)findViewById(R.id.list);

            p = ProgressDialog.show(this, "Please wait..", "Loading list..", true);

            new Thread(){
                public void run(){
                    //do some extreme work before creating list

                    try {
                        sleep(5000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    internetArray.clear();
                    //p.dismiss();
                }


            }.start();

            getPermissions(this);
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, internetArray);

            arrayAdapter.sort(new Comparator<String>() {    
                        public int compare(String object1, String object2) {
                            return object1.compareTo(object2);
                        };
                    });

            internetList.setAdapter(arrayAdapter); 

}
4

1 回答 1

1

乍一看没有 logcat,这就是问题所在:p.dismiss();.

您正在尝试关闭 UI 元素,在您的情况下是来自后台线程的进度对话框。

尽管我确信这是原因,但您应该发布您的 logcat 以获取更多详细信息。

编辑:应该考虑上述错误,尽管在创建对话框时出现错误:MainActivity.this这不能​​被实例化。您可以尝试通过this而不是类 context传递实际上下文MainActivity.this

p = ProgressDialog.show(this, "Please wait..", "Loading list..", true);

更新:也许在您的代码行中是有效的,但您必须知道,当您尝试从后台线程访问 UI 元素时会导致内存泄漏(您甚至没有尝试通过runOnUIThread()方法访问它,根据我的意见)。

我不是说你根本不应该添加它,而是你应该在ui线程中添加它。对于我们现在的问题,this工作了吗?因为我没有看到任何新的 logcat 或其他东西...... :)

于 2012-07-24T23:02:12.740 回答