Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 21 янв 2017, 04:15

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Урок 26. Intent Filter - практика
СообщениеДобавлено: 20 окт 2011, 04:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
В этом уроке:

- вызываем Activity, используя неявный вызов и Intent Filter

Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 21 сен 2016, 18:35, всего редактировалось 5 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 17 июн 2012, 18:04 

Зарегистрирован: 12 июн 2012, 21:13
Сообщений: 34
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
А вот такая же штука только для списка.
Задача: вывести отдельный activity для каждого элемента (пункта) списка.
Вот код создания списка, но при нажатии на каждый элемент открывается один и тот же активити.
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public class SpisokActivity extends ListActivity {
  2.     public void onCreate(Bundle icicle) {
  3.         super.onCreate(icicle);
  4.         String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
  5.                 "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
  6.                 "Linux", "OS/2" };
  7.         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);
  8.         setListAdapter(adapter);
  9.     }
  10.  
  11.      @Override
  12.     protected void onListItemClick(ListView l, View v, int position, long id) {
  13.         String item = (String) getListAdapter().getItem(position);
  14.         Intent intent = new Intent(this, AndroidActivity.class);
  15.         startActivity(intent);
  16. };
  17. }


Как исправить последние пару строчек, чтобы под каждый id listview был отдельный activity?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 18 июн 2012, 10:24 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Xpert043 писал(а):
Как исправить последние пару строчек, чтобы под каждый id listview был отдельный activity?

А по какому принципу у вас определяется Activity, которое должно открываться?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 18 июн 2012, 12:39 

Зарегистрирован: 31 май 2012, 00:06
Сообщений: 41
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Как исправить последние пару строчек, чтобы под каждый id listview был отдельный activity?

Легко.
Нужно в предпоследней строчки заменить на ...
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. Intent intent = new Intent(this, classArray[position]);

А перед этим (в месте инициализации) объявить массив классов сооветствующих активити
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. Class[] classArray = new Class[]{ AndroidActivity.class , iPhoneActivity.class, WindowsMobileActivity.class
  2. ...
  3. };

где например AndriodActivity - это название класса активити для первого пункта.

Для решения озвученной задачи нужно id (он же position) перевести в класс, который подставляется в Intent при его создании, и через который происходит вызов новой Активити. Можно конечно сделать и через switch(position).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 18 июн 2012, 13:10 

Зарегистрирован: 12 июн 2012, 21:13
Сообщений: 34
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Prospekt,
Ну ты советуешь создать активити и каждый элемент списка будет его вызывать. А если я не знаю сколько элементов списка у меня будет (он формируется в результате парсинга)? Я не могу создать соответствующее кол-во активити, так как не знаю его.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 19 июн 2012, 10:02 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 18:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
Xpert043 писал(а):
Как исправить последние пару строчек, чтобы под каждый id listview был отдельный activity?

уверен на 99.9% что вам НЕ НУЖЕН отдельный активити для каждого элемента списка. Вместо этого вам нужен 1 активити, который будет открываться при нажатии на любом элементе списка, а вот уже в зависимости от того, какой элемент был нажат вы будете перед вызовом активити в интент помещать маркер выбранного элемента списка через putExtra, а в открывшемся активити в onCreate() извлекать этот маркер через getExtra() и в зависимости от этого кастомизировать UI этого открывшегося активити.
Все что я описал есть в уроках, если не найдете, напишу номера.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 19 июн 2012, 10:06 
Аватар пользователя

Зарегистрирован: 13 янв 2012, 18:56
Сообщений: 219
Благодарил (а): 3 раз.
Поблагодарили: 6 раз.
вот этот топик почитайте, 1:1 ваша ситуация была у человека
viewtopic.php?t=827


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 19 июн 2012, 11:12 

Зарегистрирован: 12 июн 2012, 21:13
Сообщений: 34
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Спасибо. Там вроде все качественно разъяснено. Остается только прочитать все ссылки на уроках и попробовать. Если вдруг будут вопросы, то уже обращусь туда (чтобы было в одном месте). А это может стоит удалить, так как тему которую я тут затронул к уроку имеет не прямое отношение. Спасибо за помощь!!!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 19 июн 2012, 18:54 

Зарегистрирован: 31 май 2012, 00:06
Сообщений: 41
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Прошу прощения за нескорый ответ.

Если задача кординально не поменялась, тогда вот мои рекомендации.
В любом случае количество возможных активити у вас будет ограничено, т.е. у вас будут только те активити, для которых вы создали классы. Другое дело, что в зависимости от парсинга вы будете выбирать не все возможные активити, а какое-то их подмножество. Я имею ввиду, что если вы не предусмотрели отдельной активити скажем для платформы "UsyPusy" то внезависимости от парсинга её вы вызвать не сможете. Это очевидно, но я так на всякий случай.

Так вот у вас есть контейнер данных (например массив) в котором хранятся все классы активити (все возможные активити). Задача: по индентификатору, который в вашем случае является сторокой вернуть соотвествыющий класс.

Для этих вещей есть Хеш-таблицы. Это такой контейнер данных, который ассоциирует данный с неким ключом. Например сделать так:

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. HashMap<String,Class> activityClasses = new HashMap<String,Class>();
  2. ....
  3. // инициализаровать значениями
  4. activityClasses.put("Android", AndroidActivity.class);
  5. activityClasses.put("MacOs", MacOsActivity.class);
  6. activityClasses.put("Windows",WindowsMobileActivity.class);// и ьак далее
  7. ...
  8. //А  другой активити делаить так
  9.  protected void onListItemClick(ListView l, View v, int position, long id) {
  10.  String item = (String) getListAdapter().getItem(position);
  11.  Class itemclass =  activityClasses.get(item);
  12.  if(itemclass!=null){
  13.      Intent intent = new Intent(this, itemclass);
  14.      startActivity(intent);
  15.  }else{
  16.    // в случае если при парсинге были ошибки и соотвествующиго значения среди активити нет, что-нибудь делаем, либо извиняемся перед пользователем, либо грузим активити по дефолту, либо даем "по шеи" парсеру
  17.  }
  18.  }


В хештаблице ключи сравниваются не по адресу, а по значению (метод equals) поэтому не имеет значение как вы создавали ключи. Как вы могли уже догадаться объект Bundle тоже является хештаблицей.

ПС: как-то муторно получилось, но сегодня из меня писатель никакой. Возможно, имеет смысл последовать советам и создать параметризуемое унивирсальное активити, которое само принимает нужный вид в зависимости от выбранного (и переданного через интент) пункта списка. Адекватность этого приема для вашей задачи оценивать вам.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 17 июл 2012, 18:40 

Зарегистрирован: 11 июл 2012, 17:52
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Чтобы закрепить тему, проделаем еще кое-то. Если помните, в уроке, где я рассказывал про Intent Filter, я говорил, что

битая ссылка


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 18 июл 2012, 12:52 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
baxxabit писал(а):
Чтобы закрепить тему, проделаем еще кое-то. Если помните, в уроке, где я рассказывал про Intent Filter, я говорил, что
битая ссылка

Спасибо! Пофиксил

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 08 авг 2012, 10:01 

Зарегистрирован: 23 июл 2012, 19:31
Сообщений: 14
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
При редактировании Манифеста через вкладу Application и многократном открытии/закрытии получил все как по уроку, но стоило перейти на вкладку с XML кодом, как обнаружил дублирование одной и той же активити несколько раз, вот кусок с ActiveTime был аж четыре раза
Код: [ Загрузить ] [ Скрыть ]
Using Text Syntax Highlighting
  1. <activity android:name="ActivityTime">
  2.             <intent-filter>
  3.                 <action android:name="ru.startandroid.intent.action.showtime"/>
  4.                 <category android:name="android.intent.category.DEFAULT"/>
  5.             </intent-filter>
  6.         </activity>
  7. <activity android:name="ActivityTime">
  8.             <intent-filter>
  9.                 <action android:name="ru.startandroid.intent.action.showtime"/>
  10.                 <category android:name="android.intent.category.DEFAULT"/>
  11.             </intent-filter>
  12.         </activity>
  13. <activity android:name="ActivityTime">
  14.             <intent-filter>
  15.                 <action android:name="ru.startandroid.intent.action.showtime"/>
  16.                 <category android:name="android.intent.category.DEFAULT"/>
  17.             </intent-filter>
  18.         </activity>
  19. <activity android:name="ActivityTime">
  20.             <intent-filter>
  21.                 <action android:name="ru.startandroid.intent.action.showtime"/>
  22.                 <category android:name="android.intent.category.DEFAULT"/>
  23.             </intent-filter>
  24.         </activity>
  25. <activity android:name="ActivityDate" android:label="Date Basic">
  26.             <intent-filter>
  27.                 <action android:name="ru.startandroid.intent.action.showdate"/>
  28.                 <category android:name="android.intent.category.DEFAULT"/>
  29.             </intent-filter>
  30.         </activity>
  31.         <activity android:name="ActivityDateEx" android:label="Date Extended">
  32.             <intent-filter>
  33.                 <action android:name="ru.startandroid.intent.action.showdate"/>
  34.                 <category android:name="android.intent.category.DEFAULT"/>
  35.             </intent-filter>
  36.         </activity>

При запуске все работало. Собственно вопрос, почему так получилось и есть ли какая-нибудь горячая комбинация для удаления дублей в xml?
Удалил дубли вручную, все по-прежнему работает. Eclipse стоит на автообновлении, да и скачивал все с месяц назад.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 10 авг 2012, 11:24 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
mmvds писал(а):
При редактировании Манифеста через вкладу Application и многократном открытии/закрытии получил все как по уроку, но стоило перейти на вкладку с XML кодом, как обнаружил дублирование одной и той же активити несколько раз, вот кусок с ActiveTime был аж четыре раза

При запуске все работало. Собственно вопрос, почему так получилось и есть ли какая-нибудь горячая комбинация для удаления дублей в xml?
Удалил дубли вручную, все по-прежнему работает. Eclipse стоит на автообновлении, да и скачивал все с месяц назад.


У меня что-то похожее бывает иногда в редакторе экранов. Надеюсь, пофиксят.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 10 авг 2012, 15:28 

Зарегистрирован: 16 июл 2012, 08:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
да во всех xml такое бывает - нажимаешь DEL (работает только BackSpace) в редакторе стилей, вместо удаления символа в этом редакторе, удаляется текущий View в соседнем редакторе экрана. Так что лучше открывать по одному.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 08 сен 2012, 19:22 

Зарегистрирован: 23 авг 2012, 09:43
Сообщений: 22
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хотел бы прояснить правильно ли я думаю, что если обращаться к Activity своего же приложения, то лучше прописывать напрямую без Intent Filter, а если обращаться к стороннему Activity то лучше через Intent Filter, т.к. например могут быть различные почтовые клиенты или разные браузеры?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 11 сен 2012, 11:41 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Roman писал(а):
Хотел бы прояснить правильно ли я думаю, что если обращаться к Activity своего же приложения, то лучше прописывать напрямую без Intent Filter, а если обращаться к стороннему Activity то лучше через Intent Filter, т.к. например могут быть различные почтовые клиенты или разные браузеры?

Ну да, в этом и замысел. Мы обозначаем действие и предмет, а система предоставляет нам выбор инструмента.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 17 сен 2012, 15:13 

Зарегистрирован: 17 сен 2012, 15:10
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Добавляю в IntentFileter Action, указываю name, выдает ошибку:
"[2012-09-17 15:07:15 - com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper] Parser exception for E:\workspace\ucheb3\AndroidManifest.xml: Content is not allowed in prolog.
[2012-09-17 15:07:15 - ucheb3] Error in an XML file: aborting build.
"
подскажите в чем проблема.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 17 сен 2012, 23:45 
Аватар пользователя

Зарегистрирован: 26 июн 2012, 14:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
XML Manifesta проверьте, если даже сами руками ничего не меняли то возможно Eclpipse накосячил.

_________________
R.id.team
Политика на форуме запрещена


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 18 сен 2012, 15:54 

Зарегистрирован: 10 сен 2012, 12:58
Сообщений: 103
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Здравствуйте,

Мелочь, но, как говорится, из мелочей создается стиль.
Мне кажется в тексте урока можно указать, что
android:label="Date extended"
android:label="Date Basic"
лучше прописать в strings.xml


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 26. Intent Filter - практика
СообщениеДобавлено: 18 сен 2012, 18:22 

Зарегистрирован: 17 сен 2012, 15:10
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
rezak90 писал(а):
XML Manifesta проверьте, если даже сами руками ничего не меняли то возможно Eclpipse накосячил.

Спасибо, со 2ого раза нашел косяк..
Когда прописывал в IntentFilter>Action>name
то name писался где угодно в манифесте


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 4 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB