ListView cargar más en la parte inferior de desplazamiento

En MainActivity creo el DownloadTask que puebla la clase del modelo entonces listview vía la clase de CustomListAdapter pero creé la función para reconocer el final del desfile y quiero cargar más artículos al listview. Yo estaba leyendo y mirando el código en Internet, pero no puedo averiguarlo para resolver esto porque es un tipo diferente. La clase MainActivity

public void updateList() { adap = new CustomListAdapter(this, feedList, null); feedListView.setAdapter(adap); feedListView.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub int threshold = 1; int count = feedListView.getCount(); if (scrollState == SCROLL_STATE_IDLE) { if (feedListView.getLastVisiblePosition() >= count - threshold) { mHandler = new Handler(); mIsLoading = true; Toast.makeText(getApplicationContext(), "END", Toast.LENGTH_LONG).show(); } } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } public class DownloadFilesTask extends AsyncTask<String, Integer, Void> { @Override protected void onProgressUpdate(Integer... values) { } @Override protected void onPostExecute(Void result) { if (null != feedList) { updateList(); } if (progressbar.isShown()) { progressbar.setVisibility(View.INVISIBLE); } } @Override protected Void doInBackground(String... params) { String url = params[0]; // getting JSON string from URL JSONObject json = getJSONFromUrl(url); //parsing json data parseJson(json); return null; }} public JSONObject getJSONFromUrl(String url) { InputStream is = null; JSONObject jObj = null; String json = null; // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } public void parseJson(JSONObject json) { try { // parsing json object if (json.getString("status").equalsIgnoreCase("ok")) { JSONArray posts = json.getJSONArray("posts"); feedList = new ArrayList<FeedItem>(); for (int i = 0; i < posts.length(); i++) { JSONObject post = (JSONObject) posts.getJSONObject(i); FeedItem item = new FeedItem(); /////..... feedList.add(item); } } } catch (JSONException e) { e.printStackTrace(); } } 

CustomListAdapter

  public class CustomListAdapter extends BaseAdapter { private int mCount = 25; private ArrayList<FeedItem> listData; private LayoutInflater layoutInflater; private Context mContext; private ArrayList<String> data; protected ListView feedListView; public CustomListAdapter( Context context, ArrayList<FeedItem> listData) { this.listData = listData; layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mContext = context; } public void addMoreItems(int count) { mCount += count; notifyDataSetChanged(); } @Override public int getCount() { return mCount; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } public View getView( int position, View convertView, ViewGroup parent) { final ViewHolder holder; View row=convertView; if ((row == null) || (row.getTag()==null)) { convertView = layoutInflater.inflate(R.layout.list_row_layout, null); holder = new ViewHolder(); //// convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final FeedItem newsItem = (FeedItem) listData.get(position); ///// return convertView; } static class ViewHolder { //// } } 

Cuando llego al fondo, se crea el pan tostado.

3 Solutions collect form web for “ListView cargar más en la parte inferior de desplazamiento”

En lugar de utilizar OnScrollListener, puede comparar la posición a la lista de tamaño de datos y cargar más elementos en consecuencia en su clase de adaptador.

 public View getView( int position, View convertView, ViewGroup parent){ if(position == getCount()-1){ // load new items here. you can do a for loop here, if you'd like to add multiple items. addMoreItems(newItem); } // rest of the getView implementation } 

Y también es necesario actualizar los siguientes métodos:

 public void addMoreItems(FeedItem newItem) { listData.add(newItem); // since you want to add this item at the end of the list notifyDataSetChanged(); } @Override public int getCount(){ return listData.size(); } @Override public Object getItem(int position){ return listData.get(position); } 

Y no cree un nuevo adaptador cuando desee actualizar su listView, como lo hizo en su método de actualización. Si lo hace, se deshará del contenido anterior. En su lugar, simplemente llame al método addMoreItems de su adaptador, lo hará el truco para usted.

  @Override public void onScrollStateChanged(int scrollState) { // TODO Auto-generated method stub if(scrollState==RecyclerView.SCROLL_STATE_IDLE){ visibleItemCount = mLayoutManager.getChildCount(); totalItemCount = mLayoutManager.getItemCount(); firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition(); if (loading) { if (totalItemCount > previousTotal) { loading = false; previousTotal = totalItemCount; } } if (!loading && (totalItemCount - visibleThreshold) <= (firstVisibleItem + visibleItemCount)) { Log.v("scroll","Last Item Wow !"); if(footerView.getVisibility()!=View.VISIBLE){ footerView.setVisibility(View.VISIBLE); } refreshExpListViewData(); } } } 

Una manera muy sencilla de implementar "desplazamiento sin fin" es usar la biblioteca EndlessAdapter por commonsguy.

https://github.com/commonsguy/cwac-endless

  • Barra de Acción de Android Buscar con listview
  • ListView no se desplaza dentro de la aleta de vista en android
  • Android: agrega un elemento a la lista personalizada al pulsar el botón
  • ¿Cómo dividir el texto en 2 textviews como si hubiera 1?
  • Diseño de filas ListView de Android ignorando el relleno
  • Cómo actualizar el ListView en lista de arrastre de ListView?
  • ¿Cómo puede inflar una presentación que contenga listview en un cuadro de diálogo de alerta?
  • Android: agregar elementos a un ListView con TranscriptMode establecido en Normal
  • cómo agregar una casilla de verificación en un listview?
  • Android ListView cuando los elementos se pueden enfocar, deshabilita los clics
  • ¿Cómo puedo obtener notifyDatasetChanged () para trabajar con un ListAdapter?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.