2013-05-06 136 views
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倍了很多!

+1

片段不旨在用作回收它們的視圖中的子項。我建議你重新考慮你當前的邏輯並避免使用片段作爲該圖庫的子元素(你應該避免使用它,因爲它已被棄用)。 – Luksprog 2013-05-06 07:45:07

+0

10x @Luksprog。我知道Gallery已被棄用,但仍無法找到任何替代Gallery的效果,從左側和右側顯示部分項目,您有什麼建議嗎? – David 2013-05-06 09:19:24

+0

不幸的是,我不知道一個圖書館作爲一個畫廊更換推薦。 – Luksprog 2013-05-06 12:49:31

回答

0

單列GridView可用作Gallery替代品