Android中片段和活动之间的数据共享

Android中片段和活动之间的数据共享,android,android-fragments,android-activity,data-sharing,Android,Android Fragments,Android Activity,Data Sharing,我以前也问过类似的问题,但没有得到答案,似乎很多其他ppl都在寻找答案。所以我发布这个问题是希望得到一个清晰的答案,每个人都能从中受益 我有一个包含两个片段的活动。我希望fragment2在选中复选框时在活动中设置一个布尔变量,以便fragment1可以知道是否选中了复选框 这是我的代码: 活动: public class modestab extends Activity{ public static Context appContext; public boolean lf

我以前也问过类似的问题,但没有得到答案,似乎很多其他ppl都在寻找答案。所以我发布这个问题是希望得到一个清晰的答案,每个人都能从中受益

我有一个包含两个片段的活动。我希望fragment2在选中复选框时在活动中设置一个布尔变量,以便fragment1可以知道是否选中了复选框

这是我的代码:

活动:

public class modestab extends Activity{
    public static Context appContext;

    public boolean lf=false;

    public void onCreate(Bundle savedInstanceState){
        appContext=this;
super.onCreate(savedInstanceState);
ActionBar tabbar= getActionBar();
        tabbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab ModesTab =tabbar.newTab().setText("Modes");
        ActionBar.Tab CatTab =tabbar.newTab().setText("Categories");

        Fragment ModesFragment =new modes();
        Fragment CatFragment =new cats();

        ModesTab.setTabListener(new MyTabsListener(ModesFragment));
        CattTab.setTabListener(new MyTabsListener(CatFragment));

        tabbar.addTab(ModesTab);
        tabbar.addTab(CatTab);


    }
片段1:(我想在上面的活动中读取布尔lf集:

@TargetApi(11)
public class tabmodes extends Fragment{
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
View V=inflater.inflate(R.layout.tab_modes, container, false);
button1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(lf==false) //lf here is the lf in Activity which I want to get
片段2:我想在活动中设置lf的位置

.....
lifecheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
              @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                  if(lifecheck.isChecked())
                      getActivity().lf=true;//Where I want to set the lf flag in Activity
                  ;
              }
          });
代码没有编译,我不知道如何在活动中设置lf,也不知道如何读取它。有人建议我执行getActivity(),但我无法看到变量

我试图创建一个函数setlf(booleanjk),但我也看不到它


欢迎提供任何帮助:)

您可以通过两种方式在片段之间传递数据

首先,您可以使用和

其次,您可以通过多种方式来实现:

1) 活动->片段

  • 在您的活动中:创建一个捆绑包并使用片段。
  • 在片段中:使用Bundle=
2) 活动->片段

  • 在片段中:创建一个公共方法

  • 在活动中:调用活动的片段公共方法:

    ()(R.id.your_片段).publicMethod(args)

3) 片段->活动

  • 在片段中:使用getter和setter方法()创建un接口
  • 在您的活动中:实现接口
4) 片段->活动

  • 在您的活动中:创建公共getter和setter或其他方法
  • 在片段中:使用以下方法调用公共活动getter、setter或其他方法:

    .getSomething()、.setSomething(args)或.somethod(args)


    • 您还可以使用事件总线。这真的很简单。


      绝对不要使用像我以前的答案那样的静态方法:)

      这是通过在片段之间传递参数来共享数据的唯一方法吗?我不能直接在活动中设置和获取变量吗?否则,你可以使用SharedReferences进行数据共享我对这一点很陌生,你有没有关于setArguments和GetArguments的例子来回答一个特别要求明确答案的问题,你的帮助不大。你只是帮我解决了一个大问题,帮我省了一大堆工作。谢谢为什么使用静态变量不好。我们不能用一个静态的对象来代替静态的方法和变量吗?一个简单的多选项的书面答案真的很有帮助。我想知道每种方法的利弊权衡(每种方法都有好处还是坏处?——或者它们基本上都是一样的?),既然这个答案已经有6年了,那么在目前(2019年)这四种方法仍然是主要的吗?只是好奇。