2014-12-31 2 views
1

Я хочу иметь function, который является постоянным между всеми моими Fragments, размещенными в MainActivity. Я не уверен, как передать данные в activeFragment, так как Fragment не будет знать о выполняемой функции.Android - Как отправить данные из основной деятельности в загруженный фрагмент

Я попытался создать в MainActivityinterface и имеют Fragmentimplement в MainActivity.OnDataPass. но не уверен, как инициировать интерфейс в MainActivity. Я продолжаю получать NullPointerException.

В моей основной деятельности:

public class Mainactivity extends FragmentActivity{ 
    OnDataPass dataPasser; 
    BroadcastReceiver receiver; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     receiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String str = intent.getStringExtra("data"); 
       dataPasser.onDataPass(str); 
      } 
     }; 
    } 

    public interface OnDataPass { 
     public void onDataPass(String data); 
    } 
} 

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

public class Storage extends Fragment implements Mainactivity.OnDataPass{ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     mrootview = (ViewGroup) inflater.inflate(R.layout.storage, container, false); 
     return mrootview; 
    } 

    @Override 
    public void onDataPass(String data) { 
     Log.v(TAG, data); 

    } 
} 

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

+0

Когда вы хотите отправить данные? Вы должны либо передать его через «args» при создании фрагмента, либо использовать «FragmentManager», чтобы получить экземпляр, и да, вы можете использовать свой интерфейс, чувствуете, что на ваши вопросы отсутствует важная часть кода, где вы пытаетесь вызвать ' onDataPass' – Blundell

+0

@Blundell Знаете ли вы, что синтаксис я бы использовал для динамического определения dataPasser? или как я могу установить его только для хранения? – K3NN3TH

ответ

2

Вы довольно далеко уже:

public class Mainactivity extends FragmentActivity{ 
    OnDataPass dataPasser; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //When you create your fragment, keep a reference of it in the dataPasser variable 
     dataPasser = /* your storage fragment class or any other fragment that implements onDataPass*/ 
     ...... 
     receiver = new BroadcastReceiver() { 
       @Override 
       public void onReceive(Context context, Intent intent) { 
        String str = intent.getStringExtra("data"); 
        dataPasser.onDataPass(str); 
       } 
     }; 
    }  


    public interface OnDataPass { 
     public void onDataPass(String data); 
    } 
} 
+0

Здесь dataPaser = Я смущен. Я не знаю, какой фрагмент будет загружен, он может быть одним из многих – K3NN3TH

+0

Где определяется, какой фрагмент загружен или какой фрагмент нужен? – Hespen

+0

Я могу установить dataPasser, когда фрагмент загружен, просто не уверен в синтаксисе, чтобы установить dataPasser как 'dataPasser = ((Storage) getActivity());' – K3NN3TH

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