Как передать значение на другую вкладку без запуска Activity? - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть 2 вкладки - Tab1 и Tab2, Tab1Activity и Tab2Activity.
Я хочу передать значения из Tab1Actvity в Tab2Activity, но не хочу запускать Tab2Activity.Когда я пытаюсь использовать приведенный ниже код, он дает нулевое значение:

In Tab1Activity

getParent().getIntent().putExtra("key", "value");

In Tab2Activity

String valueString=getParent().getIntent().getStringExtra("key");
System.out.println("Testing.....: "+valueString);

Ответы [ 3 ]

5 голосов
/ 03 апреля 2012

Я действительно отговариваю вас от использования глобальных переменных, расширяя класс Application.Если ваше приложение переходит в фоновый режим (например, из-за телефонного звонка), система Android может решить убить ваше приложение.Когда вызов будет завершен, ваше приложение и стек активности будут восстановлены, но ваше состояние активности будет потеряно.

Я бы предпочел использовать широковещательные рассылки для отправки данных в другое действие.

В вашем Tab1Activity:

Intent dataIntent = new Intent();
dataIntent.setAction("com.your.app.DATA_BROADCAST");
dataIntent.putExtra("tag", "your data");
sendBroadcast(dataIntent);

Tab2Activity:

BroadcastReceiver receiver = new BroadcastReceiver() {    
  @Override
  public void onReceive(Context context, Intent intent) {    
    String yourData = intent.getStringExtra("tag");
  }
};

IntentFilter filter = new IntentFilter();
filter.addAction("com.your.app.DATA_BROADCAST");
registerReceiver(receiver, filter);
1 голос
/ 03 апреля 2012

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

public class greformanews extends TabActivity {

       public static String JorgesysTitle;
...
...
...

так в вашей деятельности, определенной на вкладке 1

@Override
 protected void onPause() { 
    greformanews.JorgesysTitle = "JORGESYS =)";
 super.onPause();
}

в вашей активности, определенной на вкладке 2

//get  value defined in Activity 1 !:)
String Title =  greformanews.JorgesysTitle
1 голос
/ 03 апреля 2012

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

В документации Android есть отличный отработанный пример, посмотрите Здравствуйте, TabWidget .

Альтернативный

Если по какой-то причине вам нужно использовать Activity, вы можете передавать информацию между ними, либо добавляя значения в пакет Extras в Intent, который вы используете для открытия каждого Activity, либо расширяя класс Application .

Расширяя класс Application (и реализуя его как Singleton), вы получаете объект, который будет существовать всякий раз, когда существует любой из ваших компонентов приложения, предоставляя централизованное место для хранения и передачи данных сложных объектов между компонентами приложения.

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