【问题标题】:How to divide and load a ListView in multiple parts?ListView如何分多个部分加载?
【发布时间】:2011-06-16 08:54:18
【问题描述】:

我想知道如何将我的ListView 分成几部分,并在用户启动我的应用程序时仅显示其中一部分,并在用户按下名为“加载更多项目”的按钮时显示其他部分。

我有一个包含 500 多个项目的大列表,我想把它分成几部分,以便快速加载。

我想要类似于任何电子邮件应用程序的功能,该应用程序在底部提供了加载更多电子邮件的选项。

如果有人对我的问题有任何示例代码,请分享其他一些指导也将不胜感激。

【问题讨论】:

  • parts是指listview里面的Sectios还是listview里面的items?
  • 例如,如果我的列表中有 250 个项目,我想将其分成五个部分,每个部分 50 个项目。 Paresh 请随时编辑我的问题,以使其他人易于理解。谢谢。
  • 您是否从 webservices(Xml) 获取列表?
  • @Kumar 不,就我而言,这与 XML 或 Web 服务无关。这是一个普通的列表。

标签: android listview load divide


【解决方案1】:

很好地实现一个按钮很容易:

在您的 onCreate 中,使用前 50 个项目加载您的适配器,然后使用添加下一个 50 等的 onClickListener 实现一个按钮。

但是 我认为您真正想要做的是延迟加载列表视图,以便在它们滚动时加载更多项目 - 这就是为什么您不需要使用额外的按钮来弄乱 UI。

为此,您的 listactivity 应该实现 OnScrollListener

这是一个例子:Android Endless List

【讨论】:

    【解决方案2】:

    从您的问题来看,您似乎希望最初加载几个项目,然后在用户单击“加载更多项目”按钮时加载更多项目。

    可能有两种情况:

    1. 第一种情况:webservice 可以分批发送响应,比如第一次发送 20 个项目,下一次用户点击“加载更多项目”按钮时发送 20 个项目。

    2. 第二种情况:如果您收到 500 个项目作为响应,那么要实现“加载更多项目”类型的功能,您必须创建数据库表来存储所有项目。完成数据库值存储后,最初获取 20 个项目,下次加载 20 个项目,依此类推。

    【讨论】:

      【解决方案3】:

      首先在列表视图中加载部分数据。 您必须使用Handler 的概念。 onclick 事件,您必须向处理程序内部的处理程序发送消息,您必须编写逻辑来加载完整数据并调用notifydataSetChanged 方法

      看看下面的示例代码。最初,用户能够看到列表的某些部分。如果用户对任何列表项进行 cvlicks,则列表用户能够看到整个列表视图。它与您所期望的相似。

      示例代码

      import java.util.ArrayList;
      
      import android.app.ListActivity;
      import android.content.res.Configuration;
      import android.os.Bundle;
      import android.os.Handler;
      import android.os.Message;
      import android.view.View;
      import android.widget.AdapterView;
      import android.widget.AdapterView.OnItemClickListener;
      import android.widget.ArrayAdapter;
      import android.widget.ListView;
      import android.widget.Toast;
      
      public class MyListView extends ListActivity {
          ArrayList<String> pens = new ArrayList<String>();
          ArrayAdapter arrayAdapter = null;
          private static final byte UPDATE_LIST = 100;
      
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              pens.add("MONT Blanc");
              pens.add("Gucci");
              pens.add("Parker");
      
              arrayAdapter = new ArrayAdapter<String>(this,
                      android.R.layout.simple_list_item_1, pens);
              setListAdapter(arrayAdapter);
      
              getListView().setTextFilterEnabled(true);
              ListView lv = getListView();
      
              lv.setOnItemClickListener(new OnItemClickListener() {
      
                  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                          long arg3) {
                      // TODO Auto-generated method stub
                      System.out.println("..Item is clicked..");
                      Message msg = new Message();
                      msg.what = UPDATE_LIST;
                      updateListHandler.sendMessage(msg);
                  }
              });
      
      
      
              // System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
              // System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));
      
          }
      
          @Override
          public void onConfigurationChanged(Configuration newConfig) {
              // TODO Auto-generated method stub
      
              super.onConfigurationChanged(newConfig);
              System.out.println("...11configuration is changed...");
          }
      
          void addMoreDataToList() {
              pens.add("item1");
              pens.add("item2");
              pens.add("item3");
      
          }
      
          protected void onListItemClick(ListView l, View v, int position, long id) {
              super.onListItemClick(l, v, position, id);
              Object o = this.getListAdapter().getItem(position);
              String pen = o.toString();
              Toast.makeText(this, id + "You have chosen the pen: " + " " + pen,
                      Toast.LENGTH_LONG).show();
          }
      
          private Handler updateListHandler = new Handler() {
              @Override
              public void handleMessage(Message msg) {
                  switch (msg.what) {
                  case UPDATE_LIST:
                      addMoreDataToList();
                      arrayAdapter.notifyDataSetChanged();
                      break;
      
                  }
                  ;
              };
          };
      
      
      
      
      }
      

      谢谢 迪帕克

      【讨论】:

        猜你喜欢
        • 2016-05-04
        • 2014-03-07
        • 2013-08-20
        • 2016-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        相关资源
        最近更新 更多