列表视图为空或没有互联网连接或具有加载状态时显示不同的视图

时间:2013-12-16 11:09:46

标签: android listview layout

我需要从Web服务获取JSON数组并填充listview。我需要在以下时间显示不同的观点:

  1. 列表正在加载
  2. 没有连接
  3. 列表为空
  4. 目前,我正在使用不同的线性布局并使用可见性来实现此目的。这样做的最佳方式是什么?

    由于

1 个答案:

答案 0 :(得分:1)

您应该使用绑定服务。我在我的应用程序中做了类似的事情。点击刷新后,我调用一个服务,该服务在后台获取数据并更新UI。

在这里查看我的服务: https://github.com/madhur/GAnalytics/blob/develop/src/in/co/madhur/ganalyticsdashclock/AnalyticsDataService.java

@Override
protected void onPostExecute(AnalyticsAccountResult result) {
    super.onPostExecute(result);
    App.getEventBus().post(result);
}

活性: https://github.com/madhur/GAnalytics/blob/develop/src/in/co/madhur/ganalyticsdashclock/MainActivity.java

@Subscribe
public void UpdateUI(AnalyticsAccountResult result) {
    ProgressBar progressbar = (ProgressBar) findViewById(R.id.pbHeaderProgress);
    LinearLayout spinnerLayout = (LinearLayout) findViewById(R.id.spinnerslayout);
    TextView statusMessage = (TextView) findViewById(R.id.statusMessage);

    switch (result.getStatus()) {
        case STARTING:
        statusMessage.setVisibility(View.GONE);
        progressbar.setVisibility(View.VISIBLE);
        spinnerLayout.setVisibility(View.GONE);
        break;

        case FAILURE:
        statusMessage.setVisibility(View.VISIBLE);
        progressbar.setVisibility(View.GONE);
        spinnerLayout.setVisibility(View.GONE);
        statusMessage.setText(result.getErrorMessage());
        break;

        case SUCCESS:
        statusMessage.setVisibility(View.GONE);
        progressbar.setVisibility(View.GONE);
        spinnerLayout.setVisibility(View.VISIBLE);

        if (result.getItems() != null)
        {
            this.acProfiles = result.getItems();
            MyAdapter myAdapter = new MyAdapter(acProfiles, this);
            listView.setAdapter(myAdapter);
            UpdateSelectionPreferences();
            if (result.isPersist() && acProfiles.size() > 0)
            {
                if (App.LOCAL_LOGV)
                Log.v(App.TAG, "saving configdata");        
                try
                {
                    appPreferences.saveConfigData(acProfiles, credential.getSelectedAccountName());
                }
                catch (JsonProcessingException e)
                {
                    Log.e(App.TAG, e.getMessage());
                }
            }
        }
        break;
    }
}

使用Otto库也很有帮助:
http://square.github.io/otto/