Как получить представление из занятия / класса из другого класса? - PullRequest
0 голосов
/ 07 ноября 2018

Итак, у меня есть макет таблицы, в каждой строке у меня есть setOnTouchListener с классом, который позволяет мне обнаруживать смахивание в строках, он уже обнаруживает это, но я пытаюсь сделать это, когда человек меняет строку , строка удалена, я пробовал несколько вещей, но я думаю, что мне нужно получить представление в другом классе, чтобы получить индекс строки. У меня есть экземпляр моего глобального класса Swipe как:

ActivitySwipeDetector activitySwipeDetector = new ActivitySwipeDetector(this);

Всякий раз, когда я создаю строку, я просто добавляю: tr.setOnTouchListener(activitySwipeDetector); tr быть строкой А вот ActivitySwipeDetector, прокомментированная часть - это то, что я пытался сделать:

public class ActivitySwipeDetector implements View.OnTouchListener {

    static final String logTag = "ActivitySwipeDetector";
    private Activity activity;
    static final int MIN_DISTANCE = 100;
    private float downX, downY, upX, upY;
    Invoices invoices = new Invoices();
    NavManager nav = new NavManager();

    public ActivitySwipeDetector(Activity activity){
        this.activity = activity;
    }

    public void onRightSwipe(){
        System.out.println("Swiped Correctly from Right to Left");
        int index = (int)nav.getCurrentFocus().getTag();
        invoices.data.remove(index);
        System.out.println("Eliminado Correctamente");
    }

    public void onLeftSwipe(){
    }

    public void onDownSwipe(){
    }

    public void onUpSwipe(){
    }

    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN: {
                downX = event.getX();
                downY = event.getY();
                return true;
            }
            case MotionEvent.ACTION_UP: {
                upX = event.getX();
                upY = event.getY();

                float deltaX = downX - upX;
                float deltaY = downY - upY;

                // swipe horizontal?
                if(Math.abs(deltaX) > Math.abs(deltaY))
                {
                    if(Math.abs(deltaX) > MIN_DISTANCE){
                        // left or right
                        if(deltaX > 0) { this.onRightSwipe(); return true; }
                        if(deltaX < 0) { this.onLeftSwipe(); return true; }
                    }
                    else {
                        Log.i(logTag, "Horizontal Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
                        return false; // We don't consume the event
                    }
                }
                // swipe vertical?
                else
                {
                    if(Math.abs(deltaY) > MIN_DISTANCE){
                        // top or down
                        if(deltaY < 0) { this.onDownSwipe(); return true; }
                        if(deltaY > 0) { this.onUpSwipe(); return true; }
                    }
                    else {
                        Log.i(logTag, "Vertical Swipe was only " + Math.abs(deltaX) + " long, need at least " + MIN_DISTANCE);
                        return false; // We don't consume the event
                    }
                }
                return true;
            }
        }
        return false;
    }

Заранее спасибо, я был бы очень признателен, по крайней мере, за несколько идей о том, что делать! * Редактировать: таблица заполнена данными: ArrayList

1 Ответ

0 голосов
/ 07 ноября 2018

Создать слушателя:

public interface SwipeCallback {
    void onRightSwipe();
    void onLeftSwipe();
    void onDownSwipe();
    void onUpSwipe();
}

Добавьте этот слушатель в ваш конструктор и установите для него глобальную переменную:

private SwipeCallback swipeCallback;

public ActivitySwipeDetector(Activity activity, SwipeCallback callback) {
    this.activity = activity;
    swipeCallback = callback;
}

Затем вызовите методы слушателя в соответствующих методах:

public void onRightSwipe() {
    listener.onRightSwipe();
    //...
}

//etc

Когда вы строите детектор:

ActivitySwipeDetector activitySwipeDetector = new ActivitySwipeDetector(
        this,
        new SwipeCallback() {
            //handle the swipes
            @Override
            public void onRightSwipe() {}

            @Override
            public void onLeftSwipe() {}

            @Override
            public void onUpSwipe() {}

            @Override
            public void onDownSwipe() {}
        }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...