我正在尝试将一些简单的String数据从我的活动传递到我的片段。这是我的代码:
的活动:
public class dashboard_view extends AppCompatActivity implements ItemFragment.OnFragmentInteractionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard_view);
Bundle bundle = new Bundle();
bundle.putString("title", "Charles Dickens' House");
ItemFragment itemFragment = new ItemFragment();
itemFragment.setArguments(bundle);
getFragmentManager().beginTransaction().add(R.id.dashboard, itemFragment).commit()
}
}
片段:
public class ItemFragment extends Fragment {
// boilerplate code that Android studio added
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
String title = bundle.getString("title");
plaqueTitle.setText(title);
return inflater.inflate(R.layout.fragment_item, container, false);
}
}
当我编译我的应用程序时,它会编译但是当它尝试在模拟器上运行应用程序时,它会崩溃并且控制台会以异常的形式显示错误消息。异常的根源是:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference at ItemFragment.onCreateView(ItemFragment.java:73)
我认为这个错误是因为片段中没有拾取Bundle,所以它什么都没有调用getString()
。但是,我不确定如何让Bundle从Activity传递到片段。
编辑:添加活动XML(我在那里添加了一个片段,以便您可以看到我想去的地方)。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.tom.plaqueit.dashboard_view"
android:background="#fff"
android:id="@+id/dashboard">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.tom.plaqueit.ItemFragment"
android:id="@+id/plaque_fragment"
tools:layout="@layout/fragment_item" />
</RelativeLayout>
答案 0 :(得分:0)
在片段的onCreateView中,尝试不创建新的bundle对象,只需使用:
String title = getArguments().getString("title");
那应该有用
答案 1 :(得分:0)
在 setText 操作之前初始化plaqueTitle(TextView)。
答案 2 :(得分:0)
好吧,这不是正确的方法,但它确实有效。向片段添加方法
itemFragment.setTitle("Charles Dickens' House");
而不是bundle.putString(“title”,“Charles Dickens'House”);
DO
let collections = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: nil)
现在您可以从片段中访问您的标题。