Android / Java - нужно найти идентификатор текущего макета - как? - PullRequest
1 голос
/ 14 марта 2011

Я создаю приложение для ОС Android и сталкиваюсь с небольшим камнем преткновения в одном вопросе. Вот что я хочу сделать:

В настоящее время я прекрасно фиксирую событие кнопки «Назад», но мне нужно, чтобы он вел себя немного иначе, в зависимости от текущего макета, который просматривает пользователь. У меня есть четыре макета, которые я использую, и если пользователь находится на макете 1, 2 или 3, я хочу, чтобы «Назад» перевел их на макет 1; но если они находятся в макете 4, я хочу, чтобы они вернулись к макету 3.

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


Спасибо за указатели - по какой-то причине у меня возникают проблемы с работой getCurrentFocus (), хотя ... возможно, из-за моей неумелости в программировании на Java.

Я разбил его на следующее:

View thisView = getCurrentFocus();
if (thisView != null){
int viewID = thisView.getId();
toastLong(Integer.toString(viewID));
} else {
toastLong("thisView is null.");
}

Проблема теперь в том, что thisView всегда нулевой - он не возвращает никаких значений. Я попытался ввести имя действия, которое я использую, вместо myActivity (делая его:

View thisView = myActivityName.getCurrentFocus();

но IDE выдает следующую ошибку и не компилируется:

Невозможно сделать статическую ссылку на нестатический метод getCurrentFocus из типа Activity.

Я явно что-то упускаю, и я предполагаю, что это что-то очень простое, что я упускаю. Есть указатели?

Ответы [ 2 ]

3 голосов
/ 15 мая 2014

У меня тоже была эта проблема, и я нашел очень простое решение. Хотя это старый вопрос, я опубликую его здесь для людей, которые ищут помощь в решении этой проблемы.

Просто создайте целое число как атрибут в вашем классе:

int layoutId;

Затем переопределите метод setContentView и сохраните идентификатор из параметра:

@Override
public void setContentView(int layoutResID) {
    this.layoutId = layoutResID;
    super.setContentView(layoutResID);
}

Очень простой трюк!

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...