Я создаю приложение и использую библиотеку под названием «SlidingActivity». [Ссылка на Github]
На самом деле у меня есть два занятия. Одно из них является основным видом деятельности приложения, а другое - расширением SlidingActivity. Поэтому, когда SlidingActivity открыт, все еще можно увидеть основную активность в фоновом режиме (см. Изображения на странице Github).
Можно ли редактировать содержимое / макет основного действия при открытом SlidingActivity?
Я пробовал использовать getParent(), но он возвращает null.
Обновлено: как предложил @Hamza Hathoute, я попытался переопределить onPause() и onDestroy(). Я видел, что onPause() вызывается каждый раз, когда открывается SlidingActivity.
Заранее спасибо. Я новичок в StackOverflow, поэтому, если я что-то сделал не так, сообщите мне!
Проблема, с которой вы столкнулись, - это проблема общения. То есть вы хотите, чтобы SlidingActivity сообщал MainActivity, что ему следует изменить свое содержимое. Хотя есть несколько подходов к этой проблеме, самым простым может быть использование LocalBroadcastManager для отправки трансляции.
Редактировать:
Операция, которая не находится на переднем плане, может быть прекращена ОС в ситуациях нехватки памяти. Таким образом, вы должны зарегистрировать свой приемник в onCreate и отменить регистрацию в onDestroy. Поэтому возможно, что вы пропустите трансляцию (если ваша деятельность была уничтожена при отправке трансляции).
Если вы хотите охватить этот случай, тогда, если вы не хотите иметь дело с постоянством (общие настройки, db), вам, вероятно, следует использовать параметр startActivityForResult, упомянутый в другом ответе. Обратной стороной этого подхода является то, что изменения в MainActivity не сразу. Поэтому, если скользящая активность не является полноэкранной, вы не увидите изменений в MainActivity.
К моему ответу добавлена дополнительная информация
@ Neïl Думали ли вы об использовании фрагмента вместо нового действия? Затем вы можете просто использовать интерфейс для связи и обновления своей активности.
@ MRah Это хорошая идея, но я новичок в Android, поэтому пока не совсем понимаю код библиотеки. Как только я смогу полностью понять, как это работает, я могу попытаться сделать его фрагментом вместо Activity.
@ Нил Я счастлив, что это сработало. И добро пожаловать в StackOverflow!
Если вы хотите показать основное действие в фоновом режиме, вы можете использовать прозрачный фон для скользящего действия.
Итак, вы должны передать все необходимые вам параметры из основного действия (а не объекта действия) с помощью намерения, используйте это для заполнения вашего скользящего действия (разработанного с прозрачным фоном).
В скользящем действии вы можете сохранить желаемые параметры, чтобы изменить основное действие, когда вы вернетесь к основному действию.
Если ваше скользящее действие всегда возвращает некоторые результаты основному действию, вы можете использовать startActivityForResult,
См. Здесь для реализации: Как управлять startActivityForResult на Android?
is really the other activity still running or is the activity in the background just a clone of the content of the previous one?
Вы можете проверить это, переопределив onPause и onDestroy и добавив сообщение журнала. Если он не отображает никаких сообщений, вы определенно можете его отредактировать, просто обратите внимание на производительность.
Это хорошая идея! Если он все еще работает, я буду следовать ответу от @MidasLefko, иначе я попытаюсь найти представление, в котором клонируется контент.
так тебе удалось заставить его работать? Я заинтересован в том, чтобы реализовать это в своих будущих приложениях.
Ага, отлично работает! Я отредактировал свой вопрос ~ 5 дней назад, чтобы поделиться своим прогрессом в отношении вашего ответа. Поскольку основное действие просто приостановлено, я последовал за ответом @MidasLefko, и он отлично работает с LocalBroadcastManager!
Приятно слышать это, я обязательно буду реализовывать SlidingActivity в своих будущих приложениях.
Ооо, я понимаю. Я попробую! Но действительно ли другое действие все еще выполняется или действие в фоновом режиме просто клон содержимого предыдущего? Большое спасибо !