Java 如何在android中重用侦听器

Java 如何在android中重用侦听器,java,android,listener,Java,Android,Listener,我一直在努力让我的观点对用户的点击做出反应。我的主要活动可以很好地使用它,我希望在多个活动中重用此代码,而不必每次都复制和粘贴它 我试图找到一种方法,将这个监听器移动到一个单独的类(和文件),然后调用在每个活动中可以唯一定义的不同响应。我能想到的唯一方法是将Activity扩展到自定义类(XAActivity)。但是,只有当我使用定制的类XActivity,而不是ListActivity等时,这样做才有效 有人知道如何将侦听器隔离并用作自定义类,这样我就不必反复复制它了吗 查看主视图 包us.c

我一直在努力让我的观点对用户的点击做出反应。我的主要活动可以很好地使用它,我希望在多个活动中重用此代码,而不必每次都复制和粘贴它

我试图找到一种方法,将这个监听器移动到一个单独的类(和文件),然后调用在每个活动中可以唯一定义的不同响应。我能想到的唯一方法是将Activity扩展到自定义类(XAActivity)。但是,只有当我使用定制的类XActivity,而不是ListActivity等时,这样做才有效

有人知道如何将侦听器隔离并用作自定义类,这样我就不必反复复制它了吗

查看主视图 包us.cimple.testswipe

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.ViewConfiguration;
import android.widget.Toast;

public class View_Main extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Implement Gesture detection
    gestureDetector = new GestureDetector(new MyGestureDetector());
    gestureListener = new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }
    };
    View v = (View) getWindow().getDecorView().getRootView();
    v.setOnTouchListener(gestureListener);
}

private void openSecond(){
    Intent i = new Intent(this, View_Second.class);
    startActivity(i);
}

public final void toast(String message) {
    Toast.makeText(getBaseContext(), message, Toast.LENGTH_SHORT).show();
}


/**
 * Gestures
 */
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;

private class MyGestureDetector extends SimpleOnGestureListener {
    final ViewConfiguration vc = ViewConfiguration.get(getBaseContext());
    final int swipeMinDistance = vc.getScaledTouchSlop() * 2;
    final int swipeThresholdVelocity = vc.getScaledMinimumFlingVelocity();

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        try { 
            /**
            if (Math.abs(e1.getY() - e2.getY()) > swipeMinDistance){
               return false;
            }
            */

            float deltaX = 0;
            float deltaY = 0;

            deltaX = e1.getX() - e2.getX();
            deltaX = Math.abs(deltaX);

            deltaY = e1.getY() - e2.getY();
            deltaY = Math.abs(deltaY);

            Log.i("View_Main - deltaX", Float.toString(deltaX));
            Log.i("View_Main - deltaY", Float.toString(deltaY));

            Log.i("View_Main - swipe e1", Float.toString(e1.getX()) +" , " + Float.toString(e1.getY()));
            Log.i("View_Main - swipe e2", Float.toString(e2.getX()) +" , " + Float.toString(e2.getY()));

            //Vertical Swipe
            if (deltaY > deltaX){
                if(e1.getY() - e2.getY() > swipeMinDistance*2 && Math.abs(velocityY) > swipeThresholdVelocity) {
                onBottomToTopSwipe();
            }  else if (e2.getY() - e1.getY() > swipeMinDistance *2 && Math.abs(velocityY) > swipeThresholdVelocity) {
                onTopToBottomSwipe();
                }
            }

            //Horizontal Swipe
            else {
                if(e1.getX() - e2.getX() > swipeMinDistance && Math.abs(velocityX) > swipeThresholdVelocity) {
                    onRightToLeftSwipe();
                }  else if (e2.getX() - e1.getX() > swipeMinDistance && Math.abs(velocityX) > swipeThresholdVelocity) {
                    onLeftToRightSwipe();
                }
            }    


        } catch (Exception e) {
            // nothing
        }
        return false;
    }
}


private void onRightToLeftSwipe() {
    //do something      
    toast("Right to Left");
    openSecond();
}

private void onLeftToRightSwipe() {
    toast("Left to Right");
    onBackPressed();
}

private void onBottomToTopSwipe() {
    toast("Bottom to Top");
    //do something
}

private void onTopToBottomSwipe(){
    toast("Top to Bottom");
    //do something
}
}

谢谢

用活动替换列表活动。您需要在此活动中使用listview。 现在就照你说的去做吧。i、 e.通过某个XAActivity类扩展所有

但是,您可以尝试更多的补丁,如CreateoonBaseListActivity和onBaseActivity,并在这两个版本中使用此侦听器,不一定需要重复代码,就像植入到单独的类中一样