2013-05-21 12 views
23

Pracuję dla aplikacji na Androida, w której muszę wyświetlać listę list z elementami. Ale jest więcej elementów do pokazania w widoku listy.W jaki sposób zaimplementować podział na strony w systemie Android listview

Postanowiłem wprowadzić paginację. Próbowałem wyszukiwać w Google, ale nie znalazłem żadnych powiązanych informacji.

Czy ktoś może mi pomóc proszę ..

+0

jaki rodzaj nawigacji? możesz po prostu utworzyć działanie po pozycji listy kliknij – stinepike

+0

przepraszam za mój błąd. Proszę sprawdzić edytowane pytanie .. – Naveen

+1

Powszechnie stosowane podejście CommonWare ['EndlessAdapter'] (https://github.com/commonsguy/cwac-endless) do listowania stron. Ewentualnie możesz zaimplementować logikę paginacji samodzielnie lub użyć np. przyciski do przejścia z jednej strony na drugą. –

Odpowiedz

24

Wdrażanie stronicowania jest bardzo proste.

Weź spojrzenie na to ...

public class MainActivity extends Activity { 

    private ListView listview; 
    private TextView title; 

    private ArrayList<String> data; 
    ArrayAdapter<String> sd; 


    public int TOTAL_LIST_ITEMS = 1030; 
    public int NUM_ITEMS_PAGE = 100; 
    private int noOfBtns; 
    private Button[] btns; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     listview = (ListView)findViewById(R.id.list); 
     title = (TextView)findViewById(R.id.title); 

     Btnfooter(); 

     data = new ArrayList<String>(); 

     /* 
     * The ArrayList data contains all the list items 
     */ 
     for(int i=0;i<TOTAL_LIST_ITEMS;i++) 
     { 
      data.add("This is Item "+(i+1)); 
     } 

     loadList(0); 

     CheckBtnBackGroud(0); 

    } 

    private void Btnfooter() 
    { 
     int val = TOTAL_LIST_ITEMS%NUM_ITEMS_PAGE; 
     val = val==0?0:1; 
     noOfBtns=TOTAL_LIST_ITEMS/NUM_ITEMS_PAGE+val; 

     LinearLayout ll = (LinearLayout)findViewById(R.id.btnLay); 

     btns = new Button[noOfBtns]; 

     for(int i=0;i<noOfBtns;i++) 
     { 
      btns[i] = new Button(this); 
      btns[i].setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
      btns[i].setText(""+(i+1)); 

      LinearLayout.LayoutParams lp = new  LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      ll.addView(btns[i], lp); 

      final int j = i; 
      btns[j].setOnClickListener(new OnClickListener() { 

       public void onClick(View v) 
       { 
        loadList(j); 
        CheckBtnBackGroud(j); 
       } 
      }); 
     } 

    } 

    /** 
    * Method for Checking Button Backgrounds 
    */ 
    private void CheckBtnBackGroud(int index) 
    { 
     title.setText("Page "+(index+1)+" of "+noOfBtns); 
     for(int i=0;i<noOfBtns;i++) 
     { 
      if(i==index) 
      { 
       btns[index].setBackgroundDrawable(getResources().getDrawable(R.drawable.box_green)); 
       btns[i].setTextColor(getResources().getColor(android.R.color.white)); 
      } 
      else 
      { 
       btns[i].setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
       btns[i].setTextColor(getResources().getColor(android.R.color.black)); 
      } 
     } 

    } 

    /** 
    * Method for loading data in listview 
    * @param number 
    */ 
    private void loadList(int number) 
    { 
     ArrayList<String> sort = new ArrayList<String>(); 

     int start = number * NUM_ITEMS_PAGE; 
     for(int i=start;i<(start)+NUM_ITEMS_PAGE;i++) 
     { 
      if(i<data.size()) 
      { 
       sort.add(data.get(i)); 
      } 
      else 
      { 
       break; 
      } 
     } 
     sd = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       sort); 
     listview.setAdapter(sd); 
    } 
} 

plik XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@android:color/black" 
    android:gravity="center" 
    android:textSize="16sp" 
    android:background="@android:color/darker_gray" 
    android:padding="10dp"/> 

<ListView 
    android:id="@+id/list" 
    android:divider="#000" 
    android:dividerHeight="1dp" 
    android:cacheColorHint="#00000000" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:fadingEdge="none"/> 

<HorizontalScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <LinearLayout 
     android:id="@+id/btnLay" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 
    </LinearLayout> 
</HorizontalScrollView> 
</LinearLayout> 

Dla bardziej jasnego wyjaśnienia i kod źródłowy wizyta ta łączy

ListView Pagination Ex-1

ListView Pagination Ex-2

2

Utworzono niestandardowy widok listy.

package com.pixecon.custom.views; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.widget.FrameLayout; 
import android.widget.ListView; 

public class PagingListView extends ListView { 
    boolean needScroll = true; 
    private String TAG = "CustomListView"; 

    public PagingListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setNeedScroll(boolean needScroll) { 
     this.needScroll = needScroll; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     if (!needScroll) { 
      return false; 
     } 
     else { 
      return super.onInterceptTouchEvent(event); 
     } 
    } 

    @Override 
    public void setOnScrollListener(OnScrollListener l) { 
     super.setOnScrollListener(l); 
    } 

    public void onScrollStarted() { 
     //Scroll Started. 
    } 

    public void onScrollStopped() { 
     centralizeTheView(); 
    } 

    private void centralizeTheView() { 
     int height = getResources().getDisplayMetrics().heightPixels; 
     int centerY = height/2; 

     int visibleFirstItemPosition = getFirstVisiblePosition(); 
     int visibleLastItemPosition = getLastVisiblePosition(); 

     Log.d(TAG, "visibleFirstVisible = " + visibleFirstItemPosition); 
     Log.d(TAG, "visibleLastVisible = " + visibleLastItemPosition); 

     //TODO: Check the calcualted value and reconfirm. 
     int firstPositionInGroup = visibleFirstItemPosition % 2 - 1; 
     if (firstPositionInGroup < 0) { 
      firstPositionInGroup = 0; 
     } 

     FrameLayout layout = (FrameLayout) getChildAt(firstPositionInGroup); 
     int bottom = layout.getBottom(); 

     //Calculate the exact bottom of the view by subtracting 
     if (bottom > centerY) { 
      Log.d(TAG, "First Item - " + visibleFirstItemPosition); 
      /*listView.smoothScrollBy(3, 1);*/ 
      //listView.smoothScrollToPosition(visibleFirstItemPosition); 
      setSelection(visibleFirstItemPosition); 
     } 
     else { 
      Log.d(TAG, "Last Item - " + visibleLastItemPosition); 
      /*listView.smoothScrollBy(-3, 1);*/ 
      //listView.smoothScrollToPosition(visibleLastItemPosition); 
      setSelection(visibleLastItemPosition); 
     } 
    } 

} 
+1

Zapomnieliście Państwo, że ScrollListener należy zaimplementować do obsługi stanów przewijania i wywoływania onScrollStoped. –

Powiązane problemy