2

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

我有一个包含 500 多个项目的大列表,并考虑将其分成几部分,以便快速加载。

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

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

4

3 回答 3

3

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

为此,可能有两种情况:

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

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

于 2011-06-16T09:21:04.713 回答
3

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

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

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

为此,您的 listactivity 应该实现 OnScrollListener

这是一个例子:Android Endless List

于 2011-06-16T09:26:14.900 回答
0

最初在列表视图中加载部分数据。您必须使用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;

            }
            ;
        };
    };




}

谢谢迪帕克

于 2011-06-16T09:27:36.337 回答