6

中央に を使用しているListViewアイテム レイアウトがありますHorizontalScrollView。アイテムを引き続き選択できるようandroid:descendantFocusability="blocksDescendants"に、親でAndroid 属性 " " を使用しました。LinearLayoutListView

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

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

4

2 に答える 2

1

Horizo​​ntalScrollView には"onClick()"がありません。これを参照してください http://developer.android.com/reference/android/widget/Horizo​​ntalScrollView.html

ジェスチャーをサポートし、「onTouchEvent(MotionEvent ev)」を持っています

クリックとして使用できます。私が準備した次のデモを参照してください。

//      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;
            }
        });
于 2012-06-30T10:37:27.990 に答える
0

次のように、boolean 変数 touchDown および touchUp をアダプター クラスに追加すると、かなりうまくいくようです。

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

完璧にはほど遠いですが、ほとんどの標準的なユースケースで機能するはずです

于 2014-07-10T21:46:27.877 に答える