34

以前に同様の質問をしたことがありますが、回答が得られず、他の多くのユーザーが回答を探しているようです。だから私はこの質問を投稿して、誰もが恩恵を受けることができる明確な答えを得ることを願っています.

2 つのフラグメントを含むアクティビティがあります。チェックボックスがチェックされているかどうかをfragment1が知ることができるように、チェックボックスがチェックされているときにfragment2にActivityにブール変数を設定させたい。

これは私のコードです:

アクティビティ:

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(boolean jk) を作成しようとしましたが、それを見ることもできません...

どんな助けでも大歓迎です:)

4

3 に答える 3

2

フラグメント間でデータを渡す方法は 2 つあります。

まず、 setArguments(...)getArguments(....)を使用して実行できます。

第二に、コールバックを使用してそれを行うことができます

于 2012-11-18T23:43:59.717 に答える
1

また、EventBusも使用できます。それは本当に簡単です。 https://github.com/greenrobot/EventBus

私の古い答えのような静的メソッドは絶対に使用しないでください:)

于 2016-01-18T11:47:19.990 に答える