Как разделить и загрузить ListView на несколько частей? - PullRequest
2 голосов
/ 16 июня 2011

Мне интересно, как я могу разделить мой ListView на части и отображать только одну его часть, когда пользователь запускает мое приложение, и отображать другие, когда пользователь нажимает кнопку под названием «Загрузить дополнительные элементы».

У меня есть большой список из более чем 500 наименований, и я хочу разделить его на части, чтобы он мог быстро загружаться.

Мне нужна функциональность, аналогичная любому почтовому приложению, которое внизу дает возможность загружать больше писем.

Если у кого-нибудь есть пример кода для моей проблемы, то, пожалуйста, поделитесь, пожалуйста, еще несколько советов.

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

хорошо реализовать кнопку достаточно просто:

в вашем onCreate, загрузите в свой адаптер первые 50 элементов, затем добавьте кнопку с onClickListener, которая добавляет следующие 50 и т. Д.

ОДНАКО Я думаю, что вы действительно хотите сделать, это лениво загрузить ваш список, чтобы он прокручивался, он загружал больше элементов - вот почему вам не нужно загромождать пользовательский интерфейс дополнительной кнопкой.

для этого ваша реализация должна реализовывать OnScrollListener

вот пример этого: Бесконечный список Android

3 голосов
/ 16 июня 2011

Судя по вашему вопросу, вам кажется, что вы хотите загрузить несколько элементов изначально, а затем загружать больше элементов в будущем всякий раз, когда пользователь нажимает кнопку «Загрузить дополнительные элементы».

Для этого возможны два случая:

  1. Первый случай: веб-сервис может отправлять ответ по частям, например, при первой отправке 20 элементов и в следующий раз при 20 элементах, когда пользователь нажимает кнопку «Загрузить дополнительные элементы».

  2. Второй случай: Если в ответ вы получите 500 элементов, то для реализации функции «Загрузить больше элементов» необходимо создать таблицу базы данных для хранения всех элементов. Как только вы закончите с хранением значений в базе данных, сначала получите 20 элементов, в следующий раз загрузите 20 элементов и т. Д.

0 голосов
/ 16 июня 2011

Изначально загрузите часть данных в виде списка. Вы должны использовать концепцию Handler. В случае события onclick вы должны отправить сообщение обработчику внутри обработчика, вам нужно написать логику для загрузки ваших полных данных и вызвать notifydataSetChanged метод

посмотрите пример кода ниже. Изначально пользователь может видеть некоторую часть списка. Если пользователь нажимает на какой-либо элемент списка, то пользователь списка может видеть весь список. Это похоже на то, что вы ожидаете.

Пример кода

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;

            }
            ;
        };
    };




}

Спасибо Дипак

...