0

Je vais basiquement sur ce site: http://blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll/HorizontalScrollView ne peut héberger qu'un seul enfant direct?

Mais je vais avoir ce problème:

Causée par: java.lang.IllegalStateException: HorizontalScrollView peut accueillir qu'un seul enfant direct »

sur cette ligne:

addView (internalWrapper);

Voici la classe myHorizontalScrollView:

public class MyHorizontalScrollView extends HorizontalScrollView { 

int scrollToViewPos = 0; 

public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(context); 
} 

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

public MyHorizontalScrollView(Context context) { 
    super(context); 
    init(context); 
} 

void init(Context context) { 
    // remove the fading as the HSV looks better without it 
    setHorizontalFadingEdgeEnabled(false); 
    setVerticalFadingEdgeEnabled(false); 
} 

public void initViews(final MyHorizontalScrollView me, View[] children, int scrollToViewIdx, SizeCallback sizeCallback) { 

    LinearLayout internalWrapper = new LinearLayout(getContext()); 
    internalWrapper.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    internalWrapper.setOrientation(LinearLayout.HORIZONTAL); 
    addView(internalWrapper); 

    final int w = me.getMeasuredWidth(); 
    final int h = me.getMeasuredHeight(); 

    sizeCallback.onGlobalLayout(); 

    int[] dims = new int[2]; 
    scrollToViewPos = 0; 
    for (int i = 0; i < children.length; i++) { 
     sizeCallback.getViewSize(i, w, h, dims); 
     internalWrapper.addView(children[i], dims[0], dims[1]); 
     if (i < scrollToViewIdx) { 
      scrollToViewPos += dims[0]; 
     } 
    } 

    new Handler().post(new Runnable() { 
     public void run() { 
      me.scrollBy(scrollToViewPos, 0); 
     } 
    }); 

} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // Allow touch events.  
    return true; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    // Allow touch events. 
    return true; 
} 

public interface SizeCallback {   
    public void onGlobalLayout(); 
    public void getViewSize(int idx, int w, int h, int[] dims); 
} 
} 

MyHorizontalScrollView xml:

<?xml version="1.0" encoding="utf-8"?> 
<com.yahya.LeftSlideMenu.MyHorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_margin="0px" 
android:fadingEdge="none" 
android:fadingEdgeLength="0px" 
android:padding="0px" 
android:scrollbars="none" > 

<LinearLayout 
    android:id="@+id/top" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_margin="0px" 
    android:background="#ffffffff" 
    android:orientation="horizontal" 
    android:padding="0px" > 
</LinearLayout> 

</com.yahya.LeftSlideMenu.MyHorizontalScrollView> 

Répondre

1

Il vous manque addView(internalWrapper); c'est pourquoi n'est pas visible.

+0

J'ai effectivement fait ... Au début, j'ai ajouté cette ligne, mais le compilateur me donne cette erreur: "E/AndroidRuntime (277): Causée par: java.lang.IllegalStateException: HorizontalScrollView peut accueillir un seul enfant direct" – yahya

+0

Il compile bien pour moi comme ça: [link] (http://paste.pocoo.org/show/4RhBDrDbyI8QJTwWlmLI/) – zoki

+0

Mais je ne suis pas sûr de comprendre ce que vous essayez de faire. D'abord vous ajoutez childrens à internalWrapper et ensuite vous les supprimez et les ajoutez à nouveau? – zoki

Questions connexes