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

  • ¿Cómo puedo agregar datos que he introducido en un cuadro de EditText en una matriz para enumerar en otra actividad?
  • Devolución de llamada a notifyDataSetChanged
  • Custom ListView Android
  • Establezca onItemClick en Adaptador personalizado ListView
  • ListView "volver" al desplazarse
  • ¿Por qué establecer setBackgroundColor no funciona en mi lista personalizada?
  • Mi listview no rellena el padre
  • ArrayAdapter - filtrado con múltiples términos de búsqueda
  • Android: Adición de texto de sub-artículo de ListView
  • ListView vs LinearLayout
  • Android ListView con múltiples selecciones y adaptadores personalizados
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.