0

私はbasiclyこのサイトに行くよ:http://blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll/Horizo​​ntalScrollViewは直接の子を1つだけホストできますか?

しかし、私はこの問題を抱えている:java.lang.IllegalStateException:によって引き起こさ

Horizo​​ntalScrollViewは「

上の唯一の直接の子をホストすることができますこのライン:

addView(internalWrapper);ここで

はmyHorizo​​ntalScrollViewクラスです。

XMLで
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); 
} 
} 

MyHorizo​​ntalScrollView:

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

答えて

1

あなたは表示されていない理由ですaddView(internalWrapper);が欠落しています。

+0

私は実際に行った...最初は、私はこの行を追加しましたが、コンパイラは私にこのエラーを与えます: "E/AndroidRuntime(277):原因:java.lang.IllegalStateException:Horizo​​ntalScrollViewは直接子を1人しかホストできません" – yahya

+0

それは私のようにうまくコンパイル:[リンク](http://paste.pocoo.org/show/4RhBDrDbyI8QJTwWlmLI/) – zoki

+0

しかし、私はあなたが何をしようとしているのか分かりません。まず、childrenをinternalWrapperに追加してから、それらを削除してもう一度追加しますか? – zoki

関連する問題