web-dev-qa-db-ja.com

フラグメントとアクティビティ間のデータ共有Android

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

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:(上記のAcitivityで設定されたブール値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
                  ;
              }
          });

コードはコンパイルされず、Activityでlfを設定する方法も読む方法もわかりません。誰かがgetActivity()を実行するよう提案しましたが、変数を見ることができません。

関数setlf(boolean jk)を作成しようとしましたが、表示されません...

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

32
Syntax_Error

たくさんの方法 :

1)アクティビティ->フラグメント

2)アクティビティ->フラグメント

  • フラグメント内:パブリックメソッドを作成します

  • アクティビティ内activefragment publicメソッドを呼び出します:

    getSupportFragmentManager (). findFragmentById (R.id.your_fragment).publicMethod(args)

3)フラグメント->アクティビティ

  • In your Fragment:getterおよびsetterメソッドを使用してunインターフェイスを作成します( callback methods
  • アクティビティ内:インターフェースを実装します

4)フラグメント->アクティビティ

  • アクティビティ内:パブリックgetterおよびsetterまたは他のメソッドを作成します
  • In your Fragment:public activity getter、setter、または他のメソッドを使用して呼び出されます:

    getActivity() 。getSomething()、 getActivity() 。setSomething(args)または getActivity() 。someMethod(args)

115
Alain Beauvois

2つの方法でフラグメント間でデータを渡すことができます。

まず、 setArguments(...) および getArguments(....) を使用してそれを行うことができます

次に、 Call back を使用してそれを行うことができます

2

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

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

1
Mete