1

Fragmentクラスでは、フラグメントをXMLレイアウトで膨らませます。レイアウトは、(ホイールの)ImageViewを含む単純なLinearLayoutです。ImageViewで発生したタッチイベントを取得したいのですが、コードは次のとおりです。

 public class WheelFragment extends Fragment {


   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

         // Inflate the layout for this fragment (Get the view from XML)
        View view = inflater.inflate(R.layout.wheel_layout, container, false);

        // Get the imageview of the wheel inside the view 
        ImageView wheelView = (ImageView) view.findViewById(R.id.wheel);


        // Set onTouchListener
        wheelView.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {


            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    Log.d("down", "ACTION_DOWN");
                }

            if (event.getAction() == MotionEvent.ACTION_UP) {
                        Log.d("up", "ACTION_UP");
                }    
            }

            return true;      
        }
        });



        // Return the view
        return view;
    }   
}

ACTION_DOWNイベントを取得するのに問題はありませんが、ACTION_UPイベントを取得できません。

役に立たないACTION_CANCELイベントを追加しようとしました(フォーラムで問題が解決する可能性があることを確認しました)。

また、戻り値としてtrue/falseの両方の値を試しました。

ACTION_UPイベントを機能させる簡単な方法はありますか?ありがとう。

4

1 に答える 1

2

さて、私は最終的に私の解決策を見つけました。

最初に、OnCreateView内にOnTouchがあったため、コードが非常に乱雑になりました。次に、クラスに「impementsOnTouchListener」を追加する必要がありました。

これが機能するコードです:

    public class WheelFragment extends Fragment implements OnTouchListener {


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

             // Inflate the layout for this fragment (Get the view from XML)
            View view = inflater.inflate(R.layout.wheel_layout, container, false);

            // Get the imageview of the wheel inside the view 
            ImageView wheelView = (ImageView) view.findViewById(R.id.wheel);


            // Set onTouchListener
            wheelView.setOnTouchListener(this);
            return view;
        }



    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            Log.d("down", "ACTION_DOWN");
        }
        if (event.getAction() == MotionEvent.ACTION_UP) {
            Log.d("up", "ACTION_UP");
        }
        return true;
    }



}

(実際、OnTouchでfalseを返すと機能しませんが、機能させるためにACTION_CANCELは必要ありません)

于 2012-05-28T10:09:13.127 に答える