【问题标题】:Android UI not updating in onLoadFinishedAndroid UI 未在 onLoadFinished 中更新
【发布时间】:2015-08-30 09:38:55
【问题描述】:

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

onLoadFinished()方法调用后,

在我的列表视图中更新数据 - 它可以正常工作。

我的问题:

但是 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);
        } 

【问题讨论】:

    标签: android android-loadermanager


    【解决方案1】:

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

    【讨论】:

    • 尝试丢失处理程序。因为 onLoadFinished() 函数在主线程上运行,所以不需要它。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多