【问题标题】:List not displayed when application returned back to AsyncTask应用程序返回 AsyncTask 时不显示列表
【发布时间】:2014-04-22 19:11:21
【问题描述】:

当我第一次调用ProcessTask 应用程序运行时,它成功地在ListView 中显示数据但是当应用程序再次运行时(在按下返回按钮并再次打开APP 后)并再次调用ProcessTask,然后我我无法查看ListView....为什么?

这里是代码

private class ProcessTask extends AsyncTask <Integer, Void, Boolean> {
    @Override
    protected Boolean doInBackground( Integer... arg0 ) {
        try {
            mReader.power( slotNum, Reader.CARD_WARM_RESET );
            mReader.setProtocol( 0, Reader.PROTOCOL_T0 );
            publishProgress(  );
            createRootNode();
            prepareListData();
            listAdapter = new ExpandableListAdapter( MainActivity.this, listDataHeader, listDataChild );
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        expListView.setAdapter( listAdapter ); //this displays the data
    }
}

【问题讨论】:

  • 这不会编译。请修复它。
  • 感谢亲爱的 Anurag 邀请您加入聊天室。我在那里问了一些问题。如果能帮助我,我真的很感激。 chat.stackoverflow.com/transcript/74478
  • @TheGoodUser 上面的聊天回答了您的问题

标签: android android-asynctask expandablelistview expandablelistadapter


【解决方案1】:

尝试像下面这样删除@Override,但我认为的问题是,在第二次,你已经设置了一个适配器,所以你必须告诉刷新数据,你用 notifyDataSetChanged() 来做。

protected void onPostExecute(Boolean result) {
    // TODO Auto-generated method stub
    expListView.setAdapter( listAdapter ); //this displays the data
    listAdapter.notifyDataSetChanged();

}

【讨论】:

  • "尝试删除@Override",不,不要那样做。这与应该发生的相反。
  • 试过了,但它仍然是第一次显示,但不是第二次:(
  • 但是当我移动这个 expListView.setAdapter(listAdapter); //这会将数据显示为单击按钮然后一切正常...为什么?
【解决方案2】:

首先知道结果是否为假,如果为假则什么都不做,否则设置适配器并通知适配器中的数据发生变化。

试试这个:

    @Override
    protected void onPostExecute(Boolean result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        if (result != false) 
            expListView.setAdapter( listAdapter ); //this displays the data
    }

并在后台工作人员更改:

listAdapter = new ExpandableListAdapter( MainActivity.this, listDataHeader, listDataChild ); 至:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        listAdapter = new ExpandableListAdapter( MainActivity.this, listDataHeader, listDataChild );
    }
});

【讨论】:

  • 试过了,但它仍然是第一次显示,但不是第二次:(
  • 你能把你的整个代码贴在这里吗?您也可以在 Facebook 上添加我进行私人对话:fb.com/Awais.is.King 或 WhatsApp:+920363355690
猜你喜欢
  • 1970-01-01
  • 2018-12-19
  • 2017-06-04
  • 2023-03-14
  • 2017-11-09
  • 2018-07-14
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多