2012-06-30 15 views
6

HorizontalScrollViewを中央に使用しているListViewアイテムレイアウトがあります。親のにアンドロイド属性「android:descendantFocusability="blocksDescendants"」を使用しましたので、ListViewの項目は選択可能です。ListViewアイテム内の水平スクロールビュー?

私が抱えている問題は、HorizontalScrollViewであるListViewアイテムの部分をクリックすると、ListViewアイテムクリックイベントが呼び出されないということです。

HorizontalScrollViewのクリックイベントをListViewリストアイテムのクリックイベントに呼び出すにはどうすればよいですか?

+0

のために働く必要がありますしてください私たちが何がうまくいかないのかをexatcly知ることができるように、ここでエラーを投稿してください。 – Aamirkhan

+0

私はエラーがありません...問題は、このように設定されているビューの動作と関係しています。 – startupsmith

+0

okあなたはカスタムadatperとして使用してあなたのXMLファイルを投稿することができますか? – Aamirkhan

答えて

1

Horizo​​ntalScrollViewそれはジェスチャーをサポートし、"onTouchEvent(MotionEventのEV)"

ですから、クリックとしてそれを使用することができますがあります。この http://developer.android.com/reference/android/widget/HorizontalScrollView.html

を参照してください、"のonClick()"を持っていません。私が準備したフォローデモを見てください。

//  Followin code will not work for HorizontalScrollView 
     /*hsv1.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(HorizontalListActivity.this, tvMiddle.getText().toString().trim(), Toast.LENGTH_SHORT).show(); 
      } 
     });*/ 

     hsv1.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       Toast.makeText(YourActivity.this, "Your Msg", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 
+0

onTouchでは、すべてのタッチでイベントが発生しますか?私はまだHorizo​​ntalScrollViewをスクロールできるようにしたい。ユーザーがHorizo​​ntalScrollViewをクリック/タップする場合にのみ、通常のリストビューアイテムのクリック動作で動作します。 – startupsmith

+0

よろしくお願いします。時間があれば、私に詳しく説明できますか? –

0

次のようにアダプタクラスにブールタッチダウン変数とタッチアップを追加するかなりうまく動作するようです:

private class MyListAdapter extends ArrayAdapter<MyObject>{ 
    ... 
    //touch down + touch up with no other motion events in between = click 
    boolean touchDown = false; 
    boolean touchUp = false; 
    private int iHostViewID; 
    ... 

    public MyListAdapter(Context context,int viewResourceId, List<MyObject> objects) { 
     super(context, textViewResourceId, objects); 
     iHostViewID = viewResourceId; 
    } 

    @Override 
    public View getView(int pos, View convertView, ViewGroup parent){ 
     View itemView = convertView; 

     //iff we cannot re-use a view 
     if(itemView == null){ 
      LayoutInflater inflater = (
      (LayoutInflater)hContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      itemView = inflater.inflate(iHostViewID, null); 
     } 

     final View hItemView = itemView; 
     final int hPosition = pos; 
     ... 
     final HorizontalScrollView textDataSV = 
     (HorizontalScrollView)itemView.findViewById(R.id.widget_hsv); 
     textDataSV.setOnTouchListener(new OnTouchListener(){ 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 

        if(event.getAction() == MotionEvent.ACTION_DOWN){ 

         touchDown = true; 
        } 
        else if(event.getAction() == MotionEvent.ACTION_UP){ 

         touchUp = true; 
        } 

        else{ 

         touchDown = false; 
         touchUp = false; 
        } 

        if(touchDown && touchUp){ 
         //click 
         //mMyListView is the reference to the list view 
         //instantiated in the view controller class responsible 
         //for setting this adapter class as the list view's adapter 
         mMyListView.performItemClick(hItemView, hPosition, 
         hItemView.getId()); 
        } 



        return false; 
       } 
     }); 
    } 
} 

それははるかに完璧からだが、最も標準的なユースケース

関連する問題