Pregunta

Me pregunto cómo podría dividir mi ListView En partes y muestre solo una parte de ella cuando el usuario inicia mi aplicación y muestra otras cuando el usuario presiona un botón llamado "Cargar más elementos".

Tengo una gran lista de más de 500 elementos y pensé en dividirlo en partes para que pueda cargarse rápidamente.

Quiero una funcionalidad similar a una aplicación de correo electrónico que brinde una opción en la parte inferior para cargar más correos electrónicos.

Si alguien tiene algún código de muestra para mi problema, por favor comparta más una pequeña orientación también sería apreciada.

¿Fue útil?

Solución

Bueno, implementar un botón es bastante fácil:

En su OnCreate, cargue su adaptador con los primeros 50 elementos, luego implemente un botón con un OnClickListener que agrega los siguientes 50, etc.

Sin embargo, creo que lo que realmente quiere hacer es cargar su View de ListView, así que a medida que se desplazan, cargará más elementos, por lo que no necesita abarrotar la interfaz de usuario con un botón adicional.

Para esto, su ListActivity debe implementar OnScrollListener

Aquí hay un ejemplo de eso: Lista interminable de Android

Otros consejos

Desde su pregunta, parece que desea cargar pocos elementos inicialmente y luego cargar más elementos en el futuro cada vez que el usuario haga clic en el botón "Cargar más elementos".

Para eso puede haber dos casos posibles:

  1. Primer caso: WebService puede enviar respuesta en piezas, como la primera vez que envía 20 elementos, y la próxima vez 20 elementos cada vez que el usuario hace clic en el botón "Cargar más elementos".

  2. Segundo caso: Si obtiene 500 elementos en respuesta, para implementar la funcionalidad de "cargar más elementos", debe crear una tabla de bases de datos para almacenar todos los elementos. Una vez que haya terminado con el almacenamiento del valor de la base de datos, obtenga 20 elementos inicialmente, la próxima vez cargue 20 elementos, etc.

Inicialmente, cargue parte de los datos en su vista de lista. Tienes que usar el concepto de Handler. Evento OnClick Debe enviar un mensaje al Handler Inside Handler Debe escribir la lógica para cargar sus datos completos y llamar notifydataSetChanged método

Eche un vistazo al código de muestra a continuación. Inicialmente, el usuario puede ver alguna parte de la lista. Si el usuario cvlicks en cualquier elemento de la lista, entonces el usuario de la lista puede ver la vista completa de la lista. Es similar a lo que esperas.

Código de muestra

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;

            }
            ;
        };
    };




}

Gracias Deepak

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top