2013-05-27 10 views
12

に私が触れたときに私ははOnClickListener scrollView

scroller.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // This is all you need to do to 3D flip 
       AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT); 
      } 

     }); 

を行う。しかし、これはトリガー取得されていない私はscrollviewにonClickListenerを添付する必要がある要素

ScrollView scroller = (ScrollView)findViewById(R.id.scrollView); 

の多くのscrollViewを持っています。何か案は?

+0

は、あなたはそれがトリガー取得されていませんか?それを記録するか、onClickメソッドでToastを表示して、動作しているかどうかを確認してください。 – Ahmad

+0

うん、私はそれを試みた。それが引き起こされない。そのビューの中には何かのサブビューがありますからそれはそれですか? –

答えて

8

ScrollViewの子がScrollViewではなく、ユーザーのタッチイベントを取得しているためです。 onClickListenerScrollViewで動作するには、ScrollViewのすべての子にclickable = false属性を設定する必要があります。

それ以外の場合は、各ScrollViewの子にonClickListenerを設定して処理することができます。

5

LinearLayoutScrollViewに入れて、setOnClickListenerに設定するのが最も良い方法です。活動中

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/myLayout" 
     android:clickable="true" 
     android:orientation="vertical"> 

     <!-- content here --> 
    </LinearLayout> 
</ScrollView> 

は:

LinearLayout lin = (LinearLayout) fragment.rootView.findViewById(R.id.myLayout); 

lin.setOnTouchListener(new setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // Whatever 
     } 
}); 
4

あなたはScrollViewの子に直接setOnClickListenerを設定する必要があります。

ScrollView唯一の子を持つことができますので、あなたは単に、このアプローチを使用することができます。

ScrollView scrollView = //... 

View.OnClickListener mOnClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // ... 
} 

//Set the onClickListener directly on the ScrollView's child 
scrollView.getChildAt(0).setOnClickListener(mOnClickListener); 
+0

これは正解です。それは機能し、ここで示唆されている選択肢は最適ではありません。 – aaaidan

+0

このソリューションの唯一の問題は、リスナーをセットアップする前に、 'ScrollView'の子がツリーに追加されるまで待つ必要があることです。それはかなりではありませんが、私は 'getChildAt(0)'を実行する前にそれを待つためにポストを使いました。 – aaaidan