android九宮格可分頁載入控制項

2021-08-26 14:44:56 字數 3789 閱讀 8293

github位址

基本思路是viewpager+gridview,每一頁viewpager檢視有乙個gridview,gridview載入九格。所以要保證資料的準確性。資料以list< list < t>>的形式。控制項實現了高度自適應,根據控制項的個數,計算控制項的高度。內部的viewpager和gridview檢視都以動態建立,無需新建乙個xml檔案,整個控制項只需要乙個item的布局檔案。

使用方法

使用時可以先請求乙個介面,需初始化資料,資料初始化需要根據總個數初始化所有資料,在每次分頁載入的時候,再通過請求當頁的資料,更改資料,重新整理頁面。

viewpager = findviewbyid(r.id.ninepages);

//資料初始化

list> lists = new arraylist<>();

for (int i = 0; i < 6; i++)

lists.add(list1);

}//設定不每頁重複載入

viewpager.seteveryrequest(false);

//設定分頁載入

viewpager.setpagingload(true);

viewpager.setlistener(new requestdatalistener()

//資料重新整理

viewpager.datainvalidate(position,changelist);

}@override

public

intgridviewcolumn()

@override

public view getview(layoutinflater inflater, int position, view convertview, viewgroup parent, listlist) else

viewholder.textview.settext(list.get(position).gettext());

return convertview;

}});

viewpager.setlist(lists);

class viewholder

注意:viewpager.setlist(lists);要在最後呼叫

檢視控制項:

public

class ninepagespaginationextends linearlayout

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

}public

void

setlistener(requestdatalistener listener)

public

void

setpagechangelistener(viewpager.onpagechangelistener pagechangelistener)

public

void

seteveryrequest(boolean everyrequest)

public

void

setpagingload(boolean pagingload)

public

void

setlist(list> list)

private

void

initview()

}@override

public

void

onpageselected(int position)

if (ispagingload) else }}

}@override

public

void

onpagescrollstatechanged(int state)

}});

}//資料重新整理

public

void

datainvalidate(int position,listchangelist)

}

viewpager介面卡:

public

class myviewpageradapterextends pageradapter

@override

public

intgetcount()

@override

public boolean isviewfromobject(@nonnull view view, @nonnull object object)

@nonnull

@override

public object instantiateitem(@nonnull viewgroup container, int position)

adapter = new mygridviewadapter(context, list.get(position),listener);

view.setadapter(adapter);

container.addview(view);

return view;

}@override

public

void

destroyitem(@nonnull viewgroup container, int position, @nonnull object object)

@override

public

intgetitemposition(@nonnull object object)

view view = (view) object;

if (currentposition == (integer) view.gettag()) else

}@override

public

void

notifydatasetchanged()

}public

void

setcurrentposition(int currentposition)

}

gridview介面卡

public

class mygridviewadapterextends baseadapter

@override

public

intgetcount()

@override

public object getitem(int position)

@override

public

long

getitemid(int position)

@override

public view getview(int position, view convertview, viewgroup parent) else

//設定item的寬高相等

convertview.setlayoutparams(new abslistview.layoutparams(width,width));

return convertview;}}

暴露的介面

public

inte***ce requestdatalistener

Android中的九宮格

1 實現基類 1 item數量控制 private void ensureitems int count else if c count for int i 0 i getchildcount i 2 mearsure處理 override protected final void onmeasur...

九宮格布局

2009 08 25 15 15 27 九宮格是一種比較古老的設計,它最基本的表現其實就像是乙個三行三列的 其實它最初是在window的c s結構中用得比較多,比如我們經常看 到軟體中的乙個窗體,其實就是乙個九宮格的典型應用,因為窗體需要在八個方向拉伸,所以在c s軟體中大量採用這種技術來布局設計。...

九宮格問題

include include stl 雙端佇列容器 include include pos.h using namespace std ofstream fout sudoku.txt deque d int lay deque d int checkout pos p,int n int sud...