Android UI未在onLoadFinished中更新

时间:2015-08-30 09:38:56

标签: android android-loadermanager

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

onLoadFinished()方法调用后,

在我的listview中更新数据 - 它可以正常工作。

我的问题:

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

但我隐藏代码的视图只是不起作用..

注意:我测试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);
        } 

2 个答案:

答案 0 :(得分:1)

切换到ASyncTask并使用onPostExecute()之类的方法来更新UI。

答案 1 :(得分:-1)

确保您在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

    }