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...