Android 如何通过意图在 2 个不同活动的 2 个片段之间传递变量
Android how to pass variables between 2 fragments in 2 different activities through intent
现在我有 2 个不同的活动,称为 MainControl(有 3 个片段)和 MainControl2(有 2 个片段)。我想将变量从 Maincontrol 中的第一个片段传递到 MainControl2 中的第一个片段。
以下是我用来实现此目的的代码:-
MainControl 第一个片段
@Override
public void openPostDescription(Data2 data2) {
Intent intent = new Intent(getActivity(), MainControl2.class);
intent.putExtra("title", data2.getTitle());
intent.putExtra("comment", data2.getNumComments());
intent.putExtra("domain", data2.getDomain());
intent.putExtra("author", data2.getAuthor());
intent.putExtra("image", data2.getUrl());
intent.putExtra("score", data2.getScore());
intent.putExtra("ups", data2.getUps());
startActivity(intent);
}
MainControl2.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_control2);
Bundle bundle = getIntent().getExtras();
PostDescription postDescription = new PostDescription();
postDescription.setArguments(bundle);
toolbar = (Toolbar)findViewById(R.id.mainControl2Toolbar);
setSupportActionBar(toolbar);
tabLayout = (TabLayout)findViewById(R.id.mainControl2TabLayout);
viewPager = (ViewPager)findViewById(R.id.mainControl2ViewPager);
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragments(new PostDescription(), "DESCRIPTION");
viewPagerAdapter.addFragments(new PostComments(), "COMMENT");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
MainControl2 第一个片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_post_description, container, false);
String title = getArguments().getString("title");
return v;
}
我得到的错误是空 object 引用中的标题。我只是无法弄清楚它是在哪个阶段导致这种中断,我是否遗漏了什么?
在 MainControl2 的第一个片段中。写
getActivity().getIntent().getStringExtra("title");
因此您的片段最终代码变为:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_post_description, container, false);
String title = getArguments().getString("title");
return v;
}
您已经使用 getArguments().getString("title");
创建片段时传递的参数 returns。
了解更多如何使用 getArguments()
和 setArguments()
here。
现在我有 2 个不同的活动,称为 MainControl(有 3 个片段)和 MainControl2(有 2 个片段)。我想将变量从 Maincontrol 中的第一个片段传递到 MainControl2 中的第一个片段。
以下是我用来实现此目的的代码:-
MainControl 第一个片段
@Override
public void openPostDescription(Data2 data2) {
Intent intent = new Intent(getActivity(), MainControl2.class);
intent.putExtra("title", data2.getTitle());
intent.putExtra("comment", data2.getNumComments());
intent.putExtra("domain", data2.getDomain());
intent.putExtra("author", data2.getAuthor());
intent.putExtra("image", data2.getUrl());
intent.putExtra("score", data2.getScore());
intent.putExtra("ups", data2.getUps());
startActivity(intent);
}
MainControl2.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_control2);
Bundle bundle = getIntent().getExtras();
PostDescription postDescription = new PostDescription();
postDescription.setArguments(bundle);
toolbar = (Toolbar)findViewById(R.id.mainControl2Toolbar);
setSupportActionBar(toolbar);
tabLayout = (TabLayout)findViewById(R.id.mainControl2TabLayout);
viewPager = (ViewPager)findViewById(R.id.mainControl2ViewPager);
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPagerAdapter.addFragments(new PostDescription(), "DESCRIPTION");
viewPagerAdapter.addFragments(new PostComments(), "COMMENT");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
MainControl2 第一个片段
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_post_description, container, false);
String title = getArguments().getString("title");
return v;
}
我得到的错误是空 object 引用中的标题。我只是无法弄清楚它是在哪个阶段导致这种中断,我是否遗漏了什么?
在 MainControl2 的第一个片段中。写
getActivity().getIntent().getStringExtra("title");
因此您的片段最终代码变为:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_post_description, container, false);
String title = getArguments().getString("title");
return v;
}
您已经使用 getArguments().getString("title");
创建片段时传递的参数 returns。
了解更多如何使用 getArguments()
和 setArguments()
here。