Перенос данных из действия фрагмента во фрагмент

Я работаю со службой Bluetooth в своем приложении, которая позволяет мне получать полученные сообщения с другого устройства. В моей FragmentActivity я использую обработчик для получения этого сообщения:

Фрагментактивность:

  public final Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                  //my code

                  case MESSAGE_READ:
                         byte[] readBuf = (byte[]) msg.obj;
                         byte[] alpha = null;
                         alpha=readBuf;

                         if(alpha!=null){
                          //my code..
              }
        }
  }

Из этого обработчика я хотел бы получить данные и передать их фрагменту. Я пытался использовать пакет, но он не работает.

Код, который я пробовал:

Во Фрагментактивити:

    Intent intent = new Intent();
intent.setClass(getApplicationContext(), General.class);
Bundle bundle=new Bundle();
bundle.putInt("battery", bat);
intent.putExtra("android.intent.extra.INTENT", bundle);

Во фрагменте:

Bundle bundle = getActivity().getIntent().getExtras();
if (bundle != null) {
int mLabel = bundle.getInt("battery", 0);
Toast.makeText(getActivity(), "tottiti: "+mLabel, Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getActivity(), "prout", Toast.LENGTH_SHORT).show();
}

Приложение возвращает «prout», что означает, что оно не может получить мои данные из моей FragmentActivity.

Есть ли другой способ получить данные из фрагмента и передать их во фрагмент?

спасибо за помощь


person Mirelvi    schedule 26.07.2013    source источник


Ответы (1)


Предполагая, что вам нужно передать данные во фрагмент во время создания, вы можете использовать setArguments() для передачи данных во фрагмент и getArguments() для чтения этих данных.

Bundle bundle = new Bundle();
bundle.putInt("battery", bat);
MyFragment fragment=new MyFragment();
fragment.setArguments(bundle);

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.fragment_container,fragment);
ft.commit();

Затем в методе onCreate() фрагмента:

Bundle bundle=getArguments(); 
int mLabel = bundle.getInt("battery", 0);

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

fragment.setBattery(bat);
person Andy Res    schedule 26.07.2013
comment
На самом деле, чтобы получить данные о батарее, мне нужно использовать кнопку в моем меню параметров (которое находится в моей FragmentActivity), которая получает состояние батареи подключенного устройства. Затем в моем фрагменте у меня есть кнопка, когда я нажимаю на эту кнопку, я хочу, чтобы моя программа получала значение состояния батареи, которое я получаю во фрагменте. Я попробовал ваш код с некоторыми изменениями, но это не работает. - person Mirelvi; 26.07.2013
comment
Я не могу использовать ft.add(R.id.fragment_container,fragment); потому что я не определил идентификатор для своего фрагмента. Я не могу получить данные во время создания, потому что мне нужно использовать кнопку, чтобы получить эти данные. - person Mirelvi; 26.07.2013
comment
Хм... попробуй сохранить данные о батарее в действии. У вас есть поле в вашем FragmentActivity, которое при нажатии на меню параметров будет хранить данные там. Затем, когда нажата кнопка из Fragment, прочитайте это поле: ((MyActivity)getActivity()).getBatteryData() - person Andy Res; 26.07.2013
comment
Можно ли использовать getPreferences для этого? потому что в моем меню параметров я уже сохранил данные о своей батарее в getPreferences: В моем меню параметров у меня есть: getPreferences(MODE_PRIVATE).edit().putString(passInfo, String.valueOf(bat)).commit(); Затем я могу получить эти данные в своем фрагменте? - person Mirelvi; 26.07.2013
comment
Если это так, то да, вы, вероятно, могли бы прочитать, если из SharedPreferences. - person Andy Res; 26.07.2013
comment
Я постараюсь найти информацию о том, как это сделать, если у вас есть пример, пожалуйста, покажите мне. благодарю вас - person Mirelvi; 26.07.2013
comment
Спасибо за вашу помощь, это работает с SharedPreferences! - person Mirelvi; 26.07.2013