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

标签 java android android-fragments

我正在使用 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/

相关文章:

android - Galaxy 选项卡的布局设计

android - 如何在 android 中以编程方式配置 Launcher Activity ?

android - 在 Android 应用程序中使用 Activity 或 Fragment

android - 导航体系结构组件-带登录屏幕的BottomNavigationView

java - 使用 SQL 中的关键字对搜索结果进行排名

java - 检查字符串中是否有年份

java - 我在编译源代码时遇到错误,它抛出了下面给出的错误

java - 数据库版本 SQLite Android

java - 从抽屉导航中打开新 fragment 时将 content_main 替换为不替换

java - 使用 apache -common-validator 时出错 --java.lang.NoClassDefFoundError : org/apache/commons/digester/Rule