gpt4 book ai didi

java - 如何使用scrollView在两个 fragment 之间进行通信?

转载 作者:行者123 更新时间:2023-12-01 13:06:44 25 4
gpt4 key购买 nike

我正在使用 ScrollView fragment 制作 Android 应用程序。像下图enter image description here

在第一个 fragment 中,我有一个单选按钮。我希望当我选择该单选按钮时,第二个 2 将在 textView 中显示“单选按钮 1 被选择”。图片 fragment 2如下: enter image description here

我的尝试:

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 。

就是这样。

编辑:为了澄清这一点,步骤如下:

  1. 创建一个名为 BaseFragment 的 fragment 。
  2. 为此 fragment 创建一个布局文件,仅包含匹配父级的 FrameLayout。
  3. 按照您的问题创建您的第一个 fragment 类和布局。
  4. 按照您的问题创建第二个 fragment 类和布局。在 Fragment 基类的 onCreateView 方法中:创建第一个 Fragment 的实例并将其添加到 FragmentLayout 占位符中,这可以使用 Fragment 事务和 `getChildFragmentManager' 方法来完成。
  5. 在您的第一个 fragment 类中,向您的 RadioButton 添加一个事件,如果您可以创建第二个 fragment 的实例,则使用 setArgument 将数据传递给它,并使用 getFragmentManager 将数据替换为当前 fragment 和“FragmentTransaction”的“替换”方法
  6. 在第二个 fragment 的“onCreateView”中获取参数并查看它。
  7. 现在不要将第一个 fragment 添加到寻呼机,只需添加基本 fragment 。

关于java - 如何使用scrollView在两个 fragment 之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23211252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com