2010-10-22 5 views
13

Итак, я одновременно новичок в Java и создаю приложения для Android, но не новы для программирования. Я прочитал большинство сайтов developer.android.com, но я не смог найти это:Предотвращение повторяющихся действий

Я хочу, чтобы убедиться, что определенное действие не работает более одного раза в одно и то же время , Таким образом, мы имеем задачу примерно так:
активность А) TabActivity, который запускает
активность B) ListView, что на щелчок, открывает
активность C), который представляет собой интерфейс для медиаплеера объекта

Прямо сейчас, всякий раз, когда кто-то нажимает кнопку «назад» в то время как на C (что, скорее всего, потому, что они будут слушать потоковый 1-часовой mp3), а затем нажимает другой элемент списка вместо того, чтобы возвращаться на C, C открывается второй раз, и воспроизводятся два потока. Конечно, мне нужен только один экземпляр C, и я хочу второй щелчок на элементе списка, чтобы вернуть C назад. Это также может быть полезно для целей уведомления.

Я фыркнула флагами (особенно FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_REORDER_TO_FRONT), но пока не удалось добиться успеха.

Если кто-то может помочь мне здесь я мог сосредоточиться на моей следующей задаче - сделать это реальный кормить читатель: P

Спасибо заранее,

+0

Я также очень новичок в Android, но я думал, что намерения должны были сделать это за вас. Как вы запускаете Activity C? –

+0

Intent i = новое намерение (MixesActivity.this, StreamController.class); \t i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Намерение.FLAG_ACTIVITY_CLEAR_TOP); \t startActivity (i); Редактировать> Флаги, где есть для целей тестирования. –

+0

Привет, насколько я знаю, намерения могут помочь передать сообщение между различными предметами, поэтому вы вызываете создание экземпляра Intent в каждом классе java для переключения между этими активами, привязывая действия к этим кнопкам и т. Д. Извините за отсутствие больше предложений ... «C открывается во второй раз, и два потока играют», значит, это означает, что C не OnPaused при нажатии на список пресса? Кстати, ФЛАГ необходим? – ladyfafa

ответ

18

Вы должны пометить свой actvity либо как "singleTask" или "singleInstance" в вашем манифесте. Я не помню точных различий между ними, но должен делать то, что вы хотите. SingleInstance просто делает что-то другое со стеком.

Пример:

<activity android:name="MainActivity" android:launchMode="singleInstance"></activity> 

Вы можете обрабатывать новые вызовы в startActivity() из того же экземпляра деятельности с onNewIntent()

+0

Подробности можно найти здесь: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode – elevine

+0

Я пробовал, что на самом деле экспериментировал со всеми возможные комбинации (насколько я могу видеть). Прямо сейчас, как B, так и C имеют эти свойства android: launchMode, и это не помогло. Это не может быть ошибка MediaPlayer, для обычного MediaPlayer, У вас есть эта проблема. –

+1

Вы уверены, что есть 2 экземпляра activityC, и вы не просто начинаете медиаплеер дважды? Покажите нам код для активностиc – Falmarri

5

Я получил его!

Для тех, кто читает этот вопрос и хочет знать сводку: я ошибочно считал, что более одного действия было запущено, но появилось больше экземпляров MediaPlayer, где выполняется. Я сделал своего медиаплеера членом класса и теперь контролирую его из события onStart().

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

Спасибо за все ваши реакции. Действительно помог мне.

-7

Просто измените имена пакетов в .xml

EX: com.org.MainActivity изменение .org.MainActivity

Это работает для меня ..... да

+0

Пожалуйста, удалите этот ответ. kthx – Gibolt

Смежные вопросы