web-dev-qa-db-ja.com

フラグメントからアクティビティ変数にアクセスする方法Android

私が持っている活動では:

public class tabsmain extends Activity{
    public static Context appContext;

    public boolean lf_ch=false;

    public void onCreate(Bundle savedInstanceState){

Tabsmain内のフラグメントからlf_chにアクセスし、場合によっては変更したいと思います。

public class tabquests extends Fragment{ 
    public CheckBox lc;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
    { 
lc.setChecked(//set it to lf_ch);

ただし、lf_chの値にアクセスできないようです。

47
Syntax_Error

これを試して:

public View onCreateView(...){
  tabsmain xxx = (tabsmain)getActivity();
  lc.setChecked(xxx.lf_ch);
}
58
David M

これは古い質問であることは知っていますが、ここでは簡単に答えることができます。フラグメントで、フラグメントが属するアクティビティである変数を定義し、onCreateViewで変数をアクティビティに接続すると、メインアクティビティのパブリック変数にアクセスできる参照があります。ここで終わったとき、私はそれを忘れていました。表示されている正確なフラグメントを見つける必要があるため、他の方法を実行するのは少し難しいです。ただし、これを使用すると、物事を簡単にやり取りできるため、他の方法で行う必要はありません。これが出くわした人の助けになることを願っています。

public Quiz_Avtivity mainQuiz;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_quiz, container, false);

mainQuiz = (Quiz_Avtivity) getActivity();
//Below is where you get a variable from the main activity
mainQuiz.AnyPublicVariable = whatEver;
//also
whatEver = mainQuiz.AnyPublicVariable
22
Mark Dail

フラグメントのアクティビティ値を取得します。

((MainActivity)getActivity())。mGoogleApiClient;

4
Sanjay Goswami

アクティビティからデータを取得する別の方法は、次の方法でアクティビティの意図にアクセスすることです。

getActivity.getIntent().getExtras();

や。。など。

Xmlのフラグメントでアクティビティを開始し、フラグメントのonCreate()動作を何らかの方法で制御したい場合に役立ちます。

PS:まず最初に何かを意図するべきです

3
Penzzz

次の方法を試すことができます。

lc.setChecked(((yourpackagename)getActivity()).lf_ch);
1
Vigneshwaran.m

汎用の結果レシーバーを作成する

enter image description here

このタスクのインターフェイスを作成して、アクティビティから文字列データをフラグメントにフェッチできます。次の手順を実行します。

インターフェイスを作成します

_public interface MyResultReceiver{

      public String getResult();     

} 
_

MyResultReceiverをフラグメントのメンバーにします

_public class tabquests extends Fragment{ 

    public CheckBox lc;
    public MyResultReceiver resultreceiver;

    @Override
    public void onAttach(Context context){
         super.onAttach(cotext);
         resultreceiver = (MyResultReceiver)context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
    { 

           YourFragment code code

           Boolean result = resultreceiver.getResult();
           lc.setChecked(result);

     }

}
_

アクティビティにMyResultReceiverを実装し、メソッドをオーバーライドします

_public class tabsmain extends Activity{

        public boolean lf_ch=false;

        // Activity code


        @Override
        public boolean getResult(){
             return lf_ch;
        }

 }
_

免責事項:

この場合、少し長く感じるかもしれません。しかし、このアプローチの利点は、このコードを別のアクティビティに再利用したい場合です。同じロジックを再度記述する必要はありません。アクティビティにMyResultReceiverを実装するだけで、メソッドをオーバーライドできます。

TIP:あらゆる種類のデータを取得できるようにするには、インターフェースのメソッド定義を変更します
frompublic String getResult();topublic Object getResult();

0
Rohit Singh

フラグメントがアクティビティの前にロードされることに注意してください。だから、あなたは電話する必要があります

_tabsmain tabsm=(tabsmain) getActivity();
_

onActivityCreated()メソッドの行

0
The Godfather

試してくださいtabsmain.appContext.lf_chは、その変数のu値を提供します。

また、そのアクティビティセットappContext = this

0
Sumant

これを試して

public boolean lf_ch=false;
public class tabsmain extends Activity{

    public static Context appContext;
    public void onCreate(Bundle savedInstanceState){
0
luchito

次のような静的キーワードを使用するには、フラグメント内のアクティビティ変数にアクセスします。

MainActvity.Java

public static boolean lf_ch=false;

tabquestsFragment.Java

boolean if_value=MainActvity.lf_ch;

あなたのお役に立てばと思います

0
Android Geek

次のようなものを試してください:

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
0
Ashish Gupta