Android UI未在onLoadFinished中更新
在我的应用程序中,我从LoaderManager获取结果 onLoadFinished()方法调用后 在我的listview中,更新数据-它工作正常 我的问题是: 但是if(data.getCount>0) 我想隐藏我的进度条和空列表消息布局。 我的日志消息打印正确数据计数>0 但是我的观点是隐藏代码不起作用 注意:我测试了outside of onLoadFinshed方法我的视图隐藏代码有效Android UI未在onLoadFinished中更新,android,android-loadermanager,Android,Android Loadermanager,在我的应用程序中,我从LoaderManager获取结果 onLoadFinished()方法调用后 在我的listview中,更新数据-它工作正常 我的问题是: 但是if(data.getCount>0) 我想隐藏我的进度条和空列表消息布局。 我的日志消息打印正确数据计数>0 但是我的观点是隐藏代码不起作用 注意:我测试了outside of onLoadFinshed方法我的视图隐藏代码有效 @Override public void onLoadFinished(Loader<Cur
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
listAdapter.changeCursor(data); //works
try {
if (data.getCount() > 0) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.d("onLoadFinished()count>0", TAG);//works
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);//not working
Log.d("onLoadFinished2 count>0", TAG);//works
mView.findViewById(R.id.customer_no_items).setVisibility(View.GONE);//not working
}
}, 500);
}
@覆盖
public void onLoadFinished(加载器、光标数据){
listAdapter.changeCursor(数据);//有效
试一试{
if(data.getCount()>0){
new Handler().postDelayed(new Runnable()){
@凌驾
公开募捐{
Log.d(“onLoadFinished()计数>0”,标记);//有效
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);//不工作
Log.d(“onLoadFinished2计数>0”,标记);//有效
mView.findViewById(R.id.customer\u no\u items).setVisibility(View.GONE);//不工作
}
}, 500);
}
切换到ASyncTask并使用它的onPostExecute()方法更新UI。切换到ASyncTask并使用它的onPostExecute()方法更新UI。确保在UI线程上使用视图。您可以尝试使用此方法
runOnUiThread(new Runnable(){
public void run() {
Log.d("onLoadFinished()count>0", TAG);//works
mView.findViewById(R.id.loadingProgress).
setVisibility(View.GONE);//not working
Log.d("onLoadFinished2 count>0", TAG);//works
mView.findViewById(R.id.customer_no_items).
setVisibility(View.GONE);
}
});
或者更好的方法是从方法中删除线程
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
listAdapter.changeCursor(data); //works
Log.d("onLoadFinished()count>0", TAG);//works
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);//not working
Log.d("onLoadFinished2 count>0", TAG);//works
mView.findViewById(R.id.customer_no_items).setVisibility(View.GONE);//not working
}
@覆盖
public void onLoadFinished(加载器、光标数据){
listAdapter.changeCursor(数据);//有效
Log.d(“onLoadFinished()计数>0”,标记);//有效
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);//不工作
Log.d(“onLoadFinished2计数>0”,标记);//有效
mView.findViewById(R.id.customer\u no\u items).setVisibility(View.GONE);//不工作
}
确保在UI线程上使用视图。您可以尝试使用此
runOnUiThread(new Runnable(){
public void run() {
Log.d("onLoadFinished()count>0", TAG);//works
mView.findViewById(R.id.loadingProgress).
setVisibility(View.GONE);//not working
Log.d("onLoadFinished2 count>0", TAG);//works
mView.findViewById(R.id.customer_no_items).
setVisibility(View.GONE);
}
});
或者更好的方法是从方法中删除线程
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
listAdapter.changeCursor(data); //works
Log.d("onLoadFinished()count>0", TAG);//works
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);//not working
Log.d("onLoadFinished2 count>0", TAG);//works
mView.findViewById(R.id.customer_no_items).setVisibility(View.GONE);//not working
}
@覆盖
public void onLoadFinished(加载器、光标数据){
listAdapter.changeCursor(数据);//有效
Log.d(“onLoadFinished()计数>0”,标记);//有效
mView.findViewById(R.id.loadingProgress).setVisibility(View.GONE);//不工作
Log.d(“onLoadFinished2计数>0”,标记);//有效
mView.findViewById(R.id.customer\u no\u items).setVisibility(View.GONE);//不工作
}
尝试丢失处理程序。因为,不需要它,因为函数onLoadFinished()正在主线程上运行。尝试丢失处理程序。因为,不需要它,因为函数onLoadFinished()正在主线程上运行。