Android - Управляйте активностью из класса участника - PullRequest
0 голосов
/ 24 марта 2011

Во-первых, я довольно новичок в программировании на Android, у меня есть некоторые основы в Java, я посмотрел на SO и нашел свою проблему без совпадений.Я пытался заставить следующий учебник работать в течение нескольких часов.Проект состоит из двух классов: активность и класс SwipeDetector, который расширяет SimpleOnGestureListener.

Решение, предлагаемое веб-сайтом Motorola, работает, но у меня возникла проблема, когда я пытался «изменить» активность при обнаружении пролистывания влево или вправо.Чтобы проверить это, я ожидал, что некоторые тосты будут отображаться при смахивании.

Моим «решением» было создание конструктора для SwipeDetector, который принимает в качестве параметров ActivityClass и Context вызова Activity.Когда эта информация известна, проще позвонить по номеру mParent.moveScreenRight();, где mParent является родительским действием.

Я знаю, что это решение кажется ужасным, и я надеюсь, что смогу получить здесь несколько советов.При необходимости я могу предоставить больше информации о реализации двух классов.

Спасибо!

С уважением, Джером

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Из вашего описания не совсем понятно, в чем проблема, но читая между строк и просматривая учебник, я думаю, что вам не хватает того, что SwipeDetector в учебнике является внутренним классом Activity. Это единственный способ вызвать moveScreenRight() или moveSreenLeft(), который вызывает mFlipper член класса Activity.

Так что код должен выглядеть примерно так:

public class MyActivity extends Activity {

  // All the Activity overrides elided

  class SwipeDetector extends SimpleGestureListener {

    // all the SwipeDetector methods
  }
}

Если не считать SwipeDetector внутренним классом, на самом деле нельзя избежать передачи ссылки на его конструктор, чтобы разрешить вызов методов в Activity. Самый чистый способ абстрагироваться от этого - это интерфейсное решение, предложенное Джозефом Эрлом.

0 голосов
/ 24 марта 2011

Вы всегда можете сделать так, чтобы ваш детектор жестов использовал интерфейс, чтобы вы могли переходить к различным действиям.

interface MovableActivity {

    public void moveLeft();
    public void moveRight();
}

Тогда в вашей реальной деятельности implement MovableActivity

class MyActivity extends Activity implements MovableActivity { ...

Тогда вашконструктор для детектора смахивания может принимать MovableActivity и вызывать moveLeft и moveRight на этом.

...