【问题标题】:ExpandableListView Not Updated After AsyncTask finishes executingAsyncTask 完成执行后 ExpandableListView 未更新
【发布时间】:2011-05-24 19:45:46
【问题描述】:

我有一个作为活动的一部分创建的 ExpandableListView:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.news);

    // create the exandable list view widget
    newsListAdapter = new NewsListAdapter(this.getApplicationContext());    

    newsListView = (ExpandableListView) findViewById(R.id.news_list_view);

    newsListView.setAdapter(newsListAdapter);

    final Button homeButton = (Button) findViewById(R.id.home_btn);

    // go back to the home page
    homeButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {                
            startActivity(new Intent(view.getContext(), HomeActivity.class));
        }
    });   

    newsListView.setOnGroupClickListener(new OnGroupClickListener() {
        public boolean onGroupClick(ExpandableListView parent, View view, int groupPosition, long arg3) {
            return false;
        }
    });

    newsListView.setOnChildClickListener(new OnChildClickListener() {
        public boolean onChildClick(ExpandableListView parent, View view, 
                                    int groupPosition, int childPosition, long id) {
            return false;
        }
    });

    showLoadingProgressDialog();

    downloadRssFeedTask = new DownloadRssFeedTask();

    downloadRssFeedTask.execute();
}  

正如您从代码中看到的那样,它会启动并从 AsyncTask 中的 RSS 提要中拉取数据。

AsyncTask 完成,进度对话框消失,Activity 被告知任务已完成:

   private void responseReceived(Channel newsResponse) {
    if (newsResponse != null)           
        newsListAdapter.buildView(newsResponse);
    }
    else {
    Toast toast = Toast.makeText(this.getApplicationContext(), 
                           "There is no news available at this time.", 
                           Toast.LENGTH_LONG);

        toast.show();
    }
}

但是,ExpandableListView 在加载数据后不会自行重绘/刷新,它是一个空白屏幕。你如何让 ExpandableListView 用 RSS 数据刷新自己?我尝试过invalidaterefreshDrawableState,但没有任何乐趣。

想法?

【问题讨论】:

  • 噢! 神奇的答案是适配器类上的notifyDataSetChanged()

标签: android android-asynctask expandablelistview


【解决方案1】:

我猜你在下载 RSS 提要后忘记在适配器上调用notifyDataSetChanged() 方法(可能你应该在AsyncTaskonPostExecute() 方法中调用它)。

【讨论】:

    【解决方案2】:

    这应该可行。

    newsListAdapter.notifyDataSetChanged()
    

    【讨论】:

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