首页 > 解决方案 > 将数据通过捆绑包从 Activity 传递到 Fragment 时获取 null

问题描述

通过捆绑传递时在途中丢失数据,我得到

尝试在String bundlePassData = this.getArguments().getString("tagName") 处的空对象引用上调用虚拟方法 'java.lang.String android.os.Bundle.getString(java.lang.String)';

这是我的代码示例。主活动->

 tagsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Bundle bundle = new Bundle();
            TextView textView = (TextView) view.findViewById(R.id.tagName);
            String selectedItemName = textView.getText().toString();
            bundle.putString("tagName", selectedItemName);

            TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
            taskAssignFragment.setArguments(bundle);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.commit();

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new TaskAssignFragment()).addToBackStack(null).commit();

            Log.i("ListView", selectedItemName);
        }
    });

任务分配片段->

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_task_assign, container, false);
    TextView test = view.findViewById(R.id.testerView);

    String bundlePassData = this.getArguments().getString("tagName");
    test.setText(bundlePassData);

    return view;
}

我应该尝试interfaces吗?但是,如果我需要将数据作为变量,而不仅仅是在函数中,因为我会在我的fragment.

标签: javaandroidandroid-fragmentsandroid-activity

解决方案


在您的代码中,您在替换时正在创建新片段。

TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
            taskAssignFragment.setArguments(bundle);

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new TaskAssignFragment()).addToBackStack(null).commit();

使用您在其中设置参数的已创建片段实例

  getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                   taskAssignFragment).addToBackStack(null).commit();

推荐阅读