English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Questo articolo illustra un esempio di implementazione di ListView in Android per ottenere un effetto di caricamento a pagina simile a Market. Condivido questo con tutti voi per farlo riferimento, come segue:
Negli ultimi giorni ho studiato l'implementazione di ListView per la paginazione e il caricamento scorrevole, ho scoperto che è possibile utilizzare il metodo OnScroll di listView per realizzarlo, ecco il codice
ListViewScroll.java
package zy.lucifer.ListViewScroll; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout.LayoutParams; public class ListViewScroll extends Activity { /** Chiamato quando l'attività viene creata per la prima volta. */ private LayoutParams mLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); */ /* Imposta le proprietà di visualizzazione della layout per massimizzare il target */ private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); ListView listView ; private int lastItem = 0; LinearLayout loadingLayout; private listViewAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = (ListView) findViewById(R.id.myList); Log.i("test", "onCreate(Bundle savedInstanceState)>>>>>>>>>>>>>>>"); // Layout lineare LinearLayout layout = new LinearLayout(this); // Imposta la direzione della layout in orizzontale layout.setOrientation(LinearLayout.HORIZONTAL); // Barra di progresso ProgressBar progressBar = new ProgressBar(this); // Posizione della barra di progresso progressBar.setPadding(0, 0, 15, 0); // Aggiungi la barra di progresso alla layout layout.addView(progressBar, mLayoutParams); // Contenuto del testo TextView textView = new TextView(this); textView.setText("Caricamento..."); textView.setGravity(Gravity.CENTER_VERTICAL); // Aggiungi il testo alla layout layout.addView(textView, FFlayoutParams); // 设置layout的重力方向,即对齐方式是 layout.setGravity(Gravity.CENTER); // 设置ListView的页脚layout loadingLayout = new LinearLayout(this); loadingLayout.addView(layout, mLayoutParams); loadingLayout.setGravity(Gravity.CENTER); listView.addFooterView(loadingLayout); adapter = new listViewAdapter(); listView.setAdapter(adapter); listView.setOnScrollListener(new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub Log.i("test", "Scroll>>>first: " + firstVisibleItem + ", visible: " + visibleItemCount + ", total: " + totalItemCount); lastItem = firstVisibleItem + visibleItemCount - 1; Log.i("test", "Scroll>>>lastItem:" + lastItem); // 显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count <= 41作条件 int scrolllength = 101; if (adapter.count <= scrolllength) { if (firstVisibleItem + visibleItemCount == totalItemCount) { adapter.count += 10; adapter.notifyDataSetChanged(); listView.setSelection(lastItem); int currentPage = adapter.count / 10; Toast.makeText(getApplicationContext(), "La pagina " + currentPage, Toast.LENGTH_LONG).show(); } } else { listView.removeFooterView(loadingLayout); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub } }); } class listViewAdapter extends BaseAdapter { int count = 10; /* starting amount */ public int getCount() { return count; } public Object getItem(int pos) { return pos; } public long getItemId(int pos) { return pos; } public View getView(int pos, View v, ViewGroup p) { Log.i("test", "getView>>>pos:" + pos); TextView view; if (v == null) { view = new TextView(ListViewScroll.this); } else { view = (TextView) v; } view.setText("ListItem " + pos); view.setTextSize(20f); view.setGravity(Gravity.CENTER); view.setHeight(60); return view; } } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:cacheColorHint="#00000000" android:id="@+id/myList" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout>
Chi è interessato a ulteriori contenuti relativi a Android può consultare le sezioni speciali di questo sito: 'Concetti di vista View Android', 'Concetti di layout layout Android', 'Concetti di elaborazione di immagini e grafica Android', 'Tutorial di入门与进阶开发 Android', 'Riassunto delle tecniche di debug e soluzioni dei problemi comuni Android', 'Riassunto delle tecniche di operazione multimediale Android (audio, video, registrazione, ecc.)', 'Riassunto dell'uso dei componenti di base Android' e 'Riassunto dell'uso dei controlli Android'.
Spero che il contenuto di questo articolo possa essere utile per la progettazione di applicazioni Android di tutti.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright è della proprietà del rispettivo proprietario, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non possiede il diritto di proprietà, non è stato elaborato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente i contenuti sospetti di violazione del copyright.