2013-07-26 93 views
2

我正在使用我的應用程序中的藍牙服務,使我能夠從其他設備接收消息。在我的FragmentActivity,我使用一個處理程序來得到這個消息:將數據從片段活動傳輸到片段

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.. 
       } 
     } 
    } 

從該處理程序,我想獲得的數據並將其傳送到一個片段。 我試圖用包,但它不工作..

我嘗試代碼:

在FragmentActivity:

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獲取我的數據。

是否有任何其他方式從fragmentActivity獲取數據並將其傳輸到片段?

謝謝您的幫助

回答

4

假設你需要的數據傳遞給在創建時的片段,您可以使用setArguments()將數據傳遞到片段,並讀取數據。

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); 
+0

事實上,爲了讓我的電池數據,我必須使用我的選項菜單中的按鈕(這是在我的FragmentActivity),它獲得連接設備的電池狀態。然後在我的片段中,我有一個按鈕,當我點擊這個按鈕時,我想讓我的程序獲得我在fragmentActivity中獲得的電池狀態值。我嘗試了一些更改後的代碼,但它不起作用。 – Mirelvi

+0

我不能使用ft.add(R.id.fragment_container,fragment);因爲我沒有爲我的片段定義一個ID。我無法在創建時獲取數據,因爲我需要使用我的按鈕來獲取此數據.. – Mirelvi

+0

哼..嘗試將電池數據存儲在活動中。在你的'FragmentActivity'中有一個字段,當點擊選項菜單時,將在那裏存儲數據。然後當點擊'Fragment'中的按鈕時,讀取該字段:'((MyActivity)getActivity())。getBatteryData()' –