在Android的碎片和活动之间的数据共享(Data Sharing between Fragmen

2019-06-21 05:28发布

香港专业教育学院问过类似的问题,并没有得到答案,似乎许多其他PPL正在寻找一个答案。 所以我张贴这个问题希望得到一个明确的答案,每个人都可以从中受益。

我有一个在它2个片段的活性。 我想,当复选框被选中,这样可以片段1知道是否复选框被选中fragment2设置一个布尔变量的活动。

这是我的代码:

活动:

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(布尔JK),而且我无法看到它...

欢迎任何帮助:)

Answer 1:

很多种方法 :

1) 活动- >片段

  • 在您的活动 :创建一个包,并使用片段。 setArguments(束)
  • 在您的片段 :使用捆绑包= getArguments()

2) 活动- >片段

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

  • 在您的活动 :拨打活性片段公共方法:

    getSupportFragmentManager ()。 findFragmentById (R.id.your_fragment).publicMethod(参数)

3) 碎片- >活动

  • 在您的片段 :创建getter和setter方法Un接口( 回调方法 )
  • 在您的活动 :实现接口

4) 碎片- >活动

  • 在您的活动 :创建公共getter和setter或其他方法
  • 在您的片段 :称为公益活动的getter,setter方法或使用其他方法:

    getActivity() .getSomething(), getActivity() .setSomething(参数)或getActivity() .someMethod(参数)



Answer 2:

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

首先,您可以通过使用做setArguments(...)和getArguments(....)

其次,你可以用它做回拨



Answer 3:

你也可以使用EventBus。 这真的很简单。 https://github.com/greenrobot/EventBus

绝对不要用静态方法像我的旧的答案:)



Answer 4:

//In fragment;
String user = MainActivity.getUserName();

静态方法是我的老办法,但绝对不好解决。 不喜欢这样使用它们。



文章来源: Data Sharing between Fragments and Activity in Android