Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SectionStatPageAdapter和bundle将数据从活动发送到多个片段_Java_Android_Android Fragments_Bundle - Fatal编程技术网

Java 使用SectionStatPageAdapter和bundle将数据从活动发送到多个片段

Java 使用SectionStatPageAdapter和bundle将数据从活动发送到多个片段,java,android,android-fragments,bundle,Java,Android,Android Fragments,Bundle,我有一个活动,我想从中向多个片段发送相同的数据。用户导航到活动后,单击按钮打开下一个片段时,将访问3个片段 这就是我想要的: 用户打开“活动”,其中包含一些数据-->用户获取到第一个片段,该片段应从“活动”中获取数据-->用户获取到第二个片段,该片段还应包含“活动”中的数据等 我尝试使用Bundle方法,但在尝试检索数据时出现了NullPointerException 以下是我的活动: public class GameActivity extends AppCompatActivity {

我有一个活动,我想从中向多个片段发送相同的数据。用户导航到活动后,单击按钮打开下一个片段时,将访问3个片段

这就是我想要的:

用户打开“活动”,其中包含一些数据-->用户获取到第一个片段,该片段应从“活动”中获取数据-->用户获取到第二个片段,该片段还应包含“活动”中的数据等

我尝试使用Bundle方法,但在尝试检索数据时出现了NullPointerException

以下是我的活动:

public class GameActivity extends AppCompatActivity {


    private SectionsStatePagerAdapter mSectionsStatePagerAdapter;
    LockableViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_container);

        Intent intent = getIntent();
        String usernamePlayer2 = intent.getStringExtra("username player 2");
        String uidPlayer2 = intent.getStringExtra("uid player 2");

        Bundle bundle = new Bundle();
        bundle.putString("username player 2", usernamePlayer2);
        bundle.putString("uid player 2", uidPlayer2);

        FragmentCategory fragobj = new FragmentCategory();
        fragobj.setArguments(bundle);

        mSectionsStatePagerAdapter = new SectionsStatePagerAdapter(getSupportFragmentManager());

        viewPager = findViewById(R.id.container);
    }

    // ViewPager for the fragments
    private void setupViewPager(ViewPager viewPager){
        SectionsStatePagerAdapter adapter = new SectionsStatePagerAdapter(getSupportFragmentManager());

        adapter.addFragment(new FragmentCategory(), "FragmentCategory1");             // 0
        adapter.addFragment(new FragmentQuestion1(), "FragmentQuestion1");            // 1
        adapter.addFragment(new FragmentAnswer1(), "FragmentAnswer1");                // 2

        viewPager.setAdapter(adapter);
    }

    public void setViewPager(int fragmentNumber){
        viewPager.setCurrentItem(fragmentNumber);
    }
这是我关于NullpointerException的第一个片段:

public class FragmentCategory extends Fragment {

    private View btnNavFragCat1, btnNavFragCat2, btnNavFragCat3;
    private TextView tvCategory1, tvCategory2, tvCategory3;
    private ImageView imageCategory1, imageCategory2, imageCategory3;

    private FirebaseFirestore firebaseFirestoreCategory = FirebaseFirestore.getInstance();
    private CollectionReference categoryCollectionRef = firebaseFirestoreCategory.collection("Categories");

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        String usernamePlayer2 = this.getArguments().getString("username player 2");

        View view = inflater.inflate(R.layout.activity_category_selection, container, false);


...
        return view;
    }
}
我知道,使用Bundle,我只能将活动中的数据发送到一个片段,但为什么会出现错误?是否有更好的方法将数据发送到多个片段。现在我会将它发送到第一个片段,然后从那里发送到下一个片段,等等


非常感谢你的帮助

由于您使用的是相同的数据,因此播放器,我将执行以下操作:

  • 创建一个存储玩家数据的存储库
  • 然后,我将为每个片段创建一个ViewModel,其中lifeCyclerOwner就是片段
  • 在这个ViewModel中,我将为播放器添加一个LiveData,在ViewModel的init函数中,我将向存储库请求数据

  • 然后片段应该观察LiveData并在UI中对其进行处理


  • 关于NullpointerException,我认为问题在于新片段不包含您试图提取的参数。

    首先删除意图键之间的空白

    “用户名球员”=>“用户名球员”

    其次您可以通过调用

    getActivity().getIntent().getExtras().getString("username_player")
    

    最后确保在开始活动时通过预期的意图值

    感谢您的帮助,这很有效。但是为什么我必须删除空白?因为它是一个标识符。指单个实体/单词而非句子的名称。