我正在尝试让ProgressDialog在显示之前加载我的listview但是我遇到了崩溃。有没有更好的方法来实现这个?
编辑:更新了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);
}
答案 0 :(得分:1)
乍一看没有logcat,这就是问题所在:p.dismiss();
。
您正试图解除UI元素,在您的情况下是后台线程中的进度对话框。
虽然我确定这是原因,但您应该发布logcat以获取更多详细信息。
编辑:虽然在创建对话框时出现错误,但仍应考虑上述错误:MainActivity.this
这无法实例化。您可以尝试按this
传递实际上下文,而不是类上下文MainActivity.this
。
p = ProgressDialog.show(this, "Please wait..", "Loading list..", true);
更新:也许在你的代码行中工作但你必须知道当你试图从后台线程访问UI元素时会导致内存泄漏(你甚至都没有尝试通过{{1}访问它根据我的观点,这是严肃的)。
我没有说你根本不应该添加它,但你应该在ui线程中添加它。对于我们现在的问题,runOnUIThread()
工作了吗?因为我没有看到任何新的logcat或者什么...:)