Android UI未在onLoadFinished中更新

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

在我的应用程序中,我从LoaderManager获取结果

onLoadFinished()方法调用后

在我的listview中,更新数据-它工作正常

我的问题是:

但是if(data.getCount>0) 我想隐藏我的进度条和空列表消息布局。 我的日志消息打印正确数据计数>0

但是我的观点是隐藏代码不起作用

注意:我测试了outside of onLoadFinshed方法我的视图隐藏代码有效

@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()正在主线程上运行。