Domanda

Mi chiedo come potrei dividere il mio ListView In parti e visualizza solo una parte quando l'utente avvia la mia app e visualizza altri quando l'utente premi un pulsante chiamato "Carica più elementi".

Ho un grande elenco di oltre 500 articoli e pensando di dividerli in parti in modo che possa caricare velocemente.

Voglio funzionalità simili a qualsiasi app di posta elettronica che fornisce un'opzione in fondo per caricare più e -mail.

Se qualcuno ha un codice di esempio per il mio problema, ti preghiamo di condividere altri una piccola guida sarebbe anche apprezzata.

È stato utile?

Soluzione

Ben implementare un pulsante è abbastanza facile:

Nel tuo OnCreate, carica l'adattatore con i 1 ° 50 elementi, quindi implementa un pulsante con un OnClickListener che aggiunge il prossimo 50 ecc.

Tuttavia, penso che quello che vuoi veramente fare sia caricare pigro la tua visione di List in modo che mentre scorrono, caricherà più elementi - ecco perché non è necessario ingombrare l'interfaccia utente con un pulsante extra.

Per questo la tua lista dovrebbe implementare OnCrollListener

Ecco un esempio di questo: Elenco infinito Android

Altri suggerimenti

Dalla tua domanda, sembra che tu voglia caricare inizialmente pochi elementi e quindi caricare più elementi in futuro ogni volta che l'utente fa clic sul pulsante "Carica più elementi".

Per questo può esserci due casi possibili:

  1. Primo caso: WebService può inviare una risposta in parti, come la prima volta che invia 20 elementi e la prossima volta 20 elementi ogni volta che l'utente fa clic sul pulsante "Carica più elementi".

  2. Secondo caso: Se ottieni 500 articoli in risposta, per implementare il tipo di funzionalità "Carica più elementi", è necessario creare tabella di database per archiviare tutti gli elementi. Una volta terminato con il valore del database, prendi inizialmente 20 elementi, la prossima volta carichi 20 elementi e così via.

Inizialmente carica parte dei dati nella vista dell'elenco. Devi usare il concetto di Handler. Evento OnClick È necessario inviare un messaggio al gestore all'interno del gestore devi scrivere la logica per caricare i dati completi e chiamare notifydataSetChanged metodo

Dai un'occhiata al codice di esempio qui sotto. Inizialmente l'utente è in grado di vedere una parte dell'elenco. Se l'utente Cvlicks su qualsiasi elemento elenco, l'elenco dell'utente è in grado di visualizzare l'intera vista elenco. È simile a quello che ti aspetti.

Codice di esempio

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;

            }
            ;
        };
    };




}

Grazie Deepak

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top