私が持っている活動では:
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の値にアクセスできないようです。
これを試して:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
これは古い質問であることは知っていますが、ここでは簡単に答えることができます。フラグメントで、フラグメントが属するアクティビティである変数を定義し、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
フラグメントのアクティビティ値を取得します。
((MainActivity)getActivity())。mGoogleApiClient;
アクティビティからデータを取得する別の方法は、次の方法でアクティビティの意図にアクセスすることです。
getActivity.getIntent().getExtras();
や。。など。
Xmlのフラグメントでアクティビティを開始し、フラグメントのonCreate()動作を何らかの方法で制御したい場合に役立ちます。
PS:まず最初に何かを意図するべきです
次の方法を試すことができます。
lc.setChecked(((yourpackagename)getActivity()).lf_ch);
このタスクのインターフェイスを作成して、アクティビティから文字列データをフラグメントにフェッチできます。次の手順を実行します。
インターフェイスを作成します
_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();
フラグメントがアクティビティの前にロードされることに注意してください。だから、あなたは電話する必要があります
_tabsmain tabsm=(tabsmain) getActivity();
_
onActivityCreated()
メソッドの行
試してくださいtabsmain.appContext.lf_ch
は、その変数のu値を提供します。
また、そのアクティビティセットappContext = this
これを試して
public boolean lf_ch=false;
public class tabsmain extends Activity{
public static Context appContext;
public void onCreate(Bundle savedInstanceState){
次のような静的キーワードを使用するには、フラグメント内のアクティビティ変数にアクセスします。
MainActvity.Java
public static boolean lf_ch=false;
tabquestsFragment.Java
boolean if_value=MainActvity.lf_ch;
あなたのお役に立てばと思います
次のようなものを試してください:
ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);