0

Все, что я прочитал о намерениях, говорит об использовании их для ввода данных или для запуска одного действия из другой деятельности. Я хочу извлечь данные из уже запущенного Activity.Вытягивание данных из одной операции Tab в другую

Учебное пособие по макету в http://developer.android.com/resources/tutorials/views/hello-tabwidget.html иллюстрирует, что я хочу делать. (Мое приложение выполняет некоторые инженерные расчеты вместо этого, но код учебника обеспечивает хорошую аналогию с моим приложением.) Учебник создает приложение с тремя вкладками, и каждая вкладка имеет отдельное действие.

Чтобы расширить пример в учебнике, предположим, что я выбираю исполнителя на вкладке/мероприятии художников. Я хочу, чтобы можно было выбрать вкладку/мероприятие «Альбомы» и показать все альбомы с участием этого исполнителя.

Мне кажется, что мне нужно использовать намерение для этого. Все обучающие материалы, которые я нашел, предполагают, что я бы создал кнопку «Просмотреть альбомы» на вкладке/мероприятии «Художники», и нажатие кнопки выполняло намерение, которое запускает действие «Альбомы» и передает имя_имя.

Я НЕ хочу создавать эту кнопку. Недвижимость на макете «Художники» драгоценна, и у меня очень хорошая вкладка «Альбомы». И активность HelloTabWidget уже содержит намерение создать вкладку «Альбомы».

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

Итак, как я могу активировать действие Альбомы PULL artistName из активности Художников, когда выбрана вкладка «Альбомы» (или отображается макет Альбомы), вместо того, чтобы активировать деятельность «СТАРТ-альбомы» и «НАЗНАЧИТЬ имя_источника»?

Эквиваленты я могу думать о других мирах программирования:

  • Глобальные переменные. Не рекомендуется в Android devt, верно? И если они существуют, что они называли?

  • Геттер, такой как artistName = Artists.getArtistName();. У меня такое чувство, что все не так просто.

  • Запись и чтение из файла, то есть массовой памяти или энергонезависимой памяти. Мне не нужно, чтобы значение artistName было постоянным. Он будет сброшен до нуля каждый раз, когда пользователь запускает приложение.

Итак, как это делается в Android-мире? Использую ли я намерение - и если да, то как?

ответ

0

Глобальные переменные были правильным ответом.

Я думал, что Java обескураживает их использование, но несколько ссылок, которые появились в ссылках на соответствующие поля в правом углу этого окна, прямо упоминали их. Один из них был "Android: How to declare global variables?", а другой был "how to pass value betweeen two tab in android". Оба указывают на класс приложения как место для определения глобальных переменных и методов. Вооружившись этим новым знанием, я нашел статью под названием "Android Application Class" в блоге Xoriant, которая расширена в ответах StackOverflow.

Лучше сначала просмотреть эти три ссылки. Мне нужно добавить несколько советов к тем, что говорили эти авторы.

  1. Класс Application должен быть в отдельном файле. (Это может быть «Дух» для некоторых людей, но не для всех.) Вот хорошая основа для примера называется Something.java:

    public class Something extends Application { 
    
        // Put application wide (global) variables here 
        // Constants are final, so they don't have to be private 
        // But other variables should be declared private; 
        // use getters/setters to access them 
        public final boolean FEET = false; 
        public final boolean METERS = true; 
        private boolean units = FEET; 
    
        @Override 
        public void onCreate() { 
        super.onCreate(); 
        // Put any application wide (global) initialization here 
        } 
    
        // Put application wide (global) methods here 
        public boolean getUnits() { 
        return units; 
        } 
    
        public void setUnits(boolean whichOne) { 
        units = whichOne; 
        } 
    } 
    
  2. Я использую Eclipse, с ADT плагин, в Windows XP. Eclipse не всегда ведет себя правильно, если вы редактируете XML-код напрямую, поэтому лучше всего открыть AndroidManifest.xml, затем выбрать вкладку «Приложение» и ввести имя вашего приложения в поле «Имя». Вам не нужно указывать точку или период перед именем. Просто введите имя своего класса, например «Глобалы» или «MyApplication» или что-то еще. (Обратите внимание, что это приложение по умолчанию в вашем манифесте. Вам не нужно создавать отдельный тег <application></application>. excerpt from Eclipse's Manifest edit page

  3. Этот шаг может не понадобиться на реальном устройстве Android, но это было необходимо для эмулятора : вам нужно использовать команду getApplicationContext() в каждом onCreate() и каждом методе, который будет обращаться к глобальным переменным и методам. Я попытался выставить его за пределы onCreate(), остальная часть моих переменных была активна, и это не сработало. внутри каждого метода кажется расточительным, но как эмулятор, так и устройство Android отлично работают с ним таким образом. Вот пример, показывающий, как я его использовал:

    public void fooBar() { 
        // Access to global variables and methods 
        final Something s = (Something)getApplicationContext(); 
    
        // ... 
        // This next line demonstrates both a global method and a global variable 
        if (s.getUnits() == s.FEET) { 
        // do something with feet 
        } else { 
        // do something with meters instead 
        } 
        // ... 
    } 
    

Это были единственные икоты, с которыми я столкнулся. Три ссылки, которые я перечислял, взятые вместе, в остальном довольно полные.

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