私の問題はBundle bundle=getArgument();
がnullです。オブジェクトデータをフラグメントからシリアライズ可能なフラグメントに渡すには?
試してみますActivitySerializable activitySerializableTest=(ActivitySerializable)bundle.getSerializable("activitySerializable");
もnullです。
レイアウトがフラグメントのときに、オブジェクトから値を取得するにはどうすればよいですか?
ご協力いただければ幸いです。
このような私のSerializableのcalss:
public class ActivitySerializable implements Serializable {
private String EDUTITLE;
public String getEDUTITLE() {
return EDUTITLE;
}
public void setEDUTITLE(String EDUTITLE) {
this.EDUTITLE = EDUTITLE;
}
}
私のフラグメントは、このように値を設定しよう:
public class ActivityListDomesticFragment extends Fragment{
.......
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ActivitySerializable activitySerializable=new ActivitySerializable();
activitySerializable.setEDUTITLE("Value");
//set the Bundle
ActivityContents activityContentsFragment=new ActivityContents();//i want to get value from this fragment
Bundle serializableBundle=new Bundle();
serializableBundle.putSerializable("activitySerializable",activitySerializable);
activityContentsFragment.setArguments(serializableBundle);//send bundle
switchFragment(activityHomePage);//switch to next Fragment
}
//change fragment function
private void switchFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
transaction.addToBackStack(null);
transaction.commit();
}
私のBフラグメントは、次のように値を取得する:
public class ActivityContents extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_contents_fragment, container, false);
Bundle bundle = getArguments();
// it shows my activitySerializableTest is on a null object reference
ActivitySerializable activitySerializableTest=(ActivitySerializable)bundle.getSerializable("activitySerializable");
String test=activitySerializableTest.getEDUIN();
activityCtEduin.setText(test);
if (bundle != null) {
String EDUTITLE=activitySerializable.getEDUTITLE();
activityCtTitle.setText(EDUTITLE);
else{
//bundle is null
}
return view;
}
}
MainActivityの引き出しアイテムをクリックして、ActivityContentsに変更します。フラグメント
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.user.taiwandigestionsociety_v11.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF">
<include layout="@layout/toolbar"/>
//fragment change over here-------------------------------------
<FrameLayout
android:id="@+id/mainFrame"
android:layout_gravity="end"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/transparent"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
変更についての私のMainActivity:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
.......
@Override
public void onClick(View view) {
if (id == R.id.activitiesContents) {
//here is change to ActivityContents fragment
switchFragment(ActivityContents.newInstance());
drawerLayout.closeDrawer(GravityCompat.START);
}
}
Bフラグメントのクラス名は何ですか? –
私はそれを更新しました、それはpublic class ActivityContents extends Fragment(B fragment) –
引数を設定してurフラグメントを表示する方法を教えてください –