将数据从Activity传递到Fragment返回NullPointerException

时间:2015-12-04 00:58:27

标签: java android android-fragments

我正在尝试将一些简单的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>

3 个答案:

答案 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)

现在您可以从片段中访问您的标题。