我正在使用 ScrollView fragment 制作 Android 应用程序。像下图
在第一个 fragment 中,我有一个单选按钮。我希望当我选择该单选按钮时,第二个 2 将在 textView 中显示“单选按钮 1 被选择”。图片 fragment 2如下:
我的尝试:
fragment 1 java 代码:
public class iq_hard_2 extends Fragment{
RadioButton r1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.layer_2_iq_hard, container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
r1 =(RadioButton)getActivity().findViewById(R.id.r1_hard);
if(r1.isChecked())
{
((Communicator)getActivity()).respond("RadioButton 1 was Chosen " );
}
}
}
fragment 2 java 代码:
public class iq_hard_3 extends Fragment {
static TextView textpoint;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.layer_3_iq_hard, container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
textpoint = (TextView)getActivity().findViewById(R.id.point);
}
public static void updateData(String data) {
// TODO Auto-generated method stub
textpoint.setText(data);
}
}
Main_Fragment Java代码
public class iq_hard_1 extends FragmentActivity implements Communicator {
ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layer_1_iq_hard_main);
pager=(ViewPager)findViewById(R.id.pager);
FragmentManager fm = getSupportFragmentManager();
pager.setAdapter(new MyAdapter(fm));
}
class MyAdapter extends FragmentPagerAdapter
{
@Override
public CharSequence getPageTitle(int position){
CharSequence title = null;
switch(position)
{
case 0:
title ="Question 1";
break;
case 1:
title ="Question 2";
break;
case 2:
title ="Question 3";
break;
case 3:
title ="Question 4";
break;
}
return title;
}
public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
Fragment fragment = null;
switch(position)
{
case 0:
fragment = new iq_hard_2();
break;
case 1:
fragment = new iq_hard_3();
break;
case 2:
fragment = new iq_hard_4();
break;
case 3:
fragment = new iq_hard_5();
break;
}
return fragment;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void respond(String data) {
iq_hard_3.updateData(data);
}
}
Communicator Java 代码
public interface Communicator {
public void respond(String data);
}
感谢您的帮助!
最佳答案
您需要像使用ViewPager
一样使用子 fragment ,因此您必须构建三个 fragment ,基本 fragment 只包含占位符,第二个 fragment 是 fragment 1,第三个 fragment 是你的 fragment 2。
现在,在创建基本 fragment 时,使用“getChildFragmentManager”将实例添加到占位符内的 fragment 1 并添加事务,现在在单选按钮事件中使用“getChildFragmentManager”开始新事务,并将 fragment 1 替换为 fragment 2,然后使用 setArgument 和 bundle 将数据传递到第二个 fragment 。
就是这样。
编辑: 为了澄清这一点,步骤如下:
- 创建一个名为 BaseFragment 的 fragment 。
- 为此 fragment 创建一个布局文件,仅包含匹配父级的 FrameLayout。
- 按照您的问题创建您的第一个 fragment 类和布局。
- 按照您的问题创建第二个 fragment 类和布局。
在 Fragment 基类的
onCreateView
方法中:创建第一个 Fragment 的实例并将其添加到 FragmentLayout 占位符中,这可以使用 Fragment 事务和 `getChildFragmentManager' 方法来完成。 - 在您的第一个 fragment 类中,向您的 RadioButton 添加一个事件,如果您可以创建第二个 fragment 的实例,则使用 setArgument 将数据传递给它,并使用
getFragmentManager
将数据替换为当前 fragment 和“FragmentTransaction”的“替换”方法 - 在第二个 fragment 的“onCreateView”中获取参数并查看它。
- 现在不要将第一个 fragment 添加到寻呼机,只需添加基本 fragment 。
关于java - 如何使用scrollView在两个 fragment 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23211252/