Отправка данных с одной вкладки на другую, которая содержит счетчик - PullRequest
0 голосов
/ 08 января 2012

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

Есть идеи, как я могу использовать Bundle для этого?

Ответы [ 3 ]

0 голосов
/ 08 января 2012

Как опция, сделайте массив, содержащий данные для счетчика, статическим, а затем создайте статический метод в вашей целевой операции примерно так:

   public static void setSpinnerData (String[] data) {
     spinnerData = data; 
   }

Затем вызовите что-то вроде этого YourActivity.setSpinnerData (myArray);

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

0 голосов
/ 08 января 2012

Вы можете отправить данные (что-то маленькое, например строку или идентификатор) с помощью трансляции. На вкладке, где генерируются данные

final Intent i = new Intent(IConstants.UPDATE_SPINNER);
i.putExtra(IConstants.DATA_UPDATE, data);
this.sendBroadcast(i)

IConstants.UPDATE_SPINNER и DATA_UPDATE - это просто строки, используемые для идентификации вашего сообщения получателем. Вы также можете поместить их в свой основной вид деятельности вместо интерфейса, который я использовал.

На вкладке со своим счетчиком объявите внутренний класс для приемника вещания, он может получить доступ к счетчику внешнего класса.

private final class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, final Intent intent) {
        if( IConstants.UPDATE_SPINNER.equals(intent.getAction()) ) {
        final String data = intent.getIntExtra(IConstants.DATA_UPDATE, "");
            // update your spinner
        return;
        }
        // process other messages ...
    }
}

Зарегистрируйте приемник вещания следующим образом, например, в onCreate () или onResume ()

this.broadcastReceiver = new MyBroadcastReceiver();
final IntentFilter f = new IntentFilter(IConstants.UPDATE_SPINNER);
// for more actions you can add them like this: 
// f.addAction(IConstants.UPDATE_ONOTHER_WIDGET);
this.registerReceiver(this.broadcastReceiver, f);

Не забудьте отменить регистрацию в onDestroy () или onPause ().

Другим вариантом будет использование обработчика и отправка сообщений обработчику. Однако вам понадобится обработчик, который находится в получателе, чтобы быть доступным в отправителе. Таким образом, ваши фрагменты или действия (вкладки) будут сильнее связаны.

0 голосов
/ 08 января 2012

это в той же деятельности или в новой деятельности?

Та же активность:

создайте onClickListener и меняйте элементы в счетчике.

Новая активность:

использовать

Inten intent = new Intent(yourclassname.this, targetClassname.class);
intent.putExtra("ID",DATA);
this.startActivity(intent);

было бы полезно, если бы вы предоставили некоторый код, но сейчас я надеюсь, что это поможет

...