2015-07-20 66 views
0

假設我想將片段A中的數據傳遞給片段B,但它會在片段B中拋出一個nullpointerexception。我想在不使用活動的情況下傳遞數據。我該如何解決這個問題?在兩個片段之間傳遞數據

在FragmentA.java

FragmentB ldf = new FragmentB(); 
Bundle args = new Bundle(); 
args.putString("gender", genderSelected); 
args.putString("name", name.getText().toString()); 
args.putString("contact", contactNo.getText().toString()); 
args.putString("age", age.getText().toString()); 
ldf.setArguments(args); 

//Inflate the fragment 
getFragmentManager().beginTransaction().add(R.id.fragmentContainer,ldf).commit(); 

在FragmentB.java - 在onCreateView()方法

//接收來自先前片段數據 - 節省

String age = getArguments().getString("age"); 
String gender = getArguments().getString("gender"); 
String contact = getArguments().getString("contact"); 
String name = getArguments().getString("name"); 
+0

之前檢查你的所有參數有價值嗎? – sasikumar

+0

發佈空指針異常 –

+0

你可以發佈你的onCreateView方法的簽名嗎? – user3641702

回答

1

您的片段A是完美的,但在片段B中,您需要根據以下代碼進行更改。

Bundle bundle = this.getArguments(); 
String age = bundle.getString("age"); 
String gender = bundle.getString("gender"); 
String contact = bundle.getString("contact"); 
String name = bundle.getString("name"); 

片段和片段之間的直接通信是不正確的方式。 Refers this link.

0

嘗試在你的類FragmentB創建一個靜態方法

public static FragmentB newInstance(String gender, String name, String contact, String age) { 

    FragmentB fragment = new FragmentB(); 
    Bundle args = new Bundle(); 
    args.putString("gender", genderSelected); 
    args.putString("name", name.getText().toString()); 
    args.putString("contact", contactNo.getText().toString()); 
    args.putString("age", age.getText().toString()); 
    fragment.setArguments(args); 
    return fragment; 

}//newInstance 

//Inflate the fragment 
getFragmentManager().beginTransaction().add(R.id.fragmentContainer,FragmentB.newInstance(gender,name,contact,age)).commit(); 

最終得到了DATAS在onCreateView()爲你做!