0
我試圖實現一個畫廊,每個單元格是一個片段。碎片畫廊
gallery_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/img1" />
getView()GalleryAdapter的(延伸BaseAdapter):
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
mHolder = new ViewHolder();
mFrameLayout = (FrameLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.gallery_item, null);
mFrameLayout.setPadding(25,0,25,0);
//Add fragment to frame layout
mFragmentManager.beginTransaction().add(mFrameLayout.getId(), new CardFrontFragment()).commit();
convertView = mFrameLayout;
mHolder.frameLayout = mFrameLayout;
convertView.setTag(mHolder);
}
else
{
mHolder = (ViewHolder) convertView.getTag();
}
mHolder.frameLayout.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.MATCH_PARENT, Gallery.LayoutParams.MATCH_PARENT));
return mFrameLayout;
}
private static class ViewHolder {
FrameLayout frameLayout;
}
它的工作,但問題是,所謂的getView()的無限循環畫廊。
它看起來像一個onMeasure問題,這裏是堆棧:
Thread [<1> main] (Suspended (breakpoint at line 62 in GalleryAdapter3))
GalleryAdapter3.getView(int, View, ViewGroup) line: 62
Gallery(AbsSpinner).onMeasure(int, int) line: 193
Gallery(View).measure(int, int) line: 15518
RelativeLayout.measureChildHorizontal(View, RelativeLayout$LayoutParams, int, int) line: 681
RelativeLayout.onMeasure(int, int) line: 461
RelativeLayout(View).measure(int, int) line: 15518
FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4825
FrameLayout.onMeasure(int, int) line: 310
FrameLayout(View).measure(int, int) line: 15518
LinearLayout.measureVertical(int, int) line: 847
LinearLayout.onMeasure(int, int) line: 588
LinearLayout(View).measure(int, int) line: 15518
PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4825
PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) line: 310
PhoneWindow$DecorView.onMeasure(int, int) line: 2176
PhoneWindow$DecorView(View).measure(int, int) line: 15518
ViewRootImpl.performMeasure(int, int) line: 1874
ViewRootImpl.measureHierarchy(View, WindowManager$LayoutParams, Resources, int, int) line: 1089
ViewRootImpl.performTraversals() line: 1265
ViewRootImpl.doTraversal() line: 989
ViewRootImpl$TraversalRunnable.run() line: 4351
Choreographer$CallbackRecord.run(long) line: 749
Choreographer.doCallbacks(int, long) line: 562
Choreographer.doFrame(long, int) line: 532
Choreographer$FrameDisplayEventReceiver.run() line: 735
Handler.handleCallback(Message) line: 725
Choreographer$FrameHandler(Handler).dispatchMessage(Message) line: 92
Looper.loop() line: 137
ActivityThread.main(String[]) line: 5041
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 511
ZygoteInit$MethodAndArgsCaller.run() line: 793
ZygoteInit.main(String[]) line: 560
NativeStart.main(String[]) line: not available [native method]
10倍了很多!
片段不旨在用作回收它們的視圖中的子項。我建議你重新考慮你當前的邏輯並避免使用片段作爲該圖庫的子元素(你應該避免使用它,因爲它已被棄用)。 – Luksprog 2013-05-06 07:45:07
10x @Luksprog。我知道Gallery已被棄用,但仍無法找到任何替代Gallery的效果,從左側和右側顯示部分項目,您有什麼建議嗎? – David 2013-05-06 09:19:24
不幸的是,我不知道一個圖書館作爲一個畫廊更換推薦。 – Luksprog 2013-05-06 12:49:31