In der Tätigkeit habe ich:
public class tabsmain extends Activity{
public static Context appContext;
public boolean lf_ch=false;
public void onCreate(Bundle savedInstanceState){
Ich möchte auf lf_ch von einem Fragment in tabsmain zugreifen und es möglicherweise ändern.
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);
Ich kann jedoch nicht auf den Wert von lf_ch zugreifen.
Versuche dies:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
Ich weiß, das ist eine alte Frage, aber hier ist eine einfache Antwort, die funktioniert, ohne durch irgendwelche Reifen zu springen. In "Fragment" definieren Sie eine Variable, die die Aktivität ist, in der sich das Fragment befindet. Dann verbinden Sie in onCreateView die Variable mit der Aktivität, und dann haben Sie eine Referenz, die auf jede öffentliche Variable in der Hauptaktivität zugreifen kann. Ich hatte es vergessen, als ich hier gelandet war. Es ist etwas schwierig, den anderen Weg zu finden, da Sie genau das Fragment finden müssen, das angezeigt wird. Sie sollten es jedoch nicht anders machen, da Sie die Dinge leicht hin und her transportieren können. Ich hoffe, das hilft jedem, der darauf stößt.
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
aktivitätswert in Fragment übernehmen.
((MainActivity) getActivity ()). MGoogleApiClient;
Eine andere Möglichkeit, Daten aus Aktivitäten abzurufen, ist der Zugriff auf die Absicht der Aktivität über:
getActivity.getIntent().getExtras();
und ETC.
Dies kann nützlich sein, wenn Sie die Aktivität mit fragment in xml starten und das onCreate () - Verhalten von fragment irgendwie steuern möchten.
PS: Natürlich solltest du zuerst etwas vorgeben
Sie können für diese Aufgabe eine Schnittstelle erstellen, die String-Daten von einer beliebigen Aktivität in Ihr Fragment abruft. Folge diesen Schritten.
Eine Schnittstelle erstellen
public interface MyResultReceiver{
public String getResult();
}
MyResultReceiver
zu einem Mitglied Ihres Fragments machen
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);
}
}
Implementiere MyResultReceiver
in der Aktivität und überschreibe die Methode
public class tabsmain extends Activity{
public boolean lf_ch=false;
// Activity code
@Override
public boolean getResult(){
return lf_ch;
}
}
Sie könnten es für diesen Fall etwas langwierig finden. Der Vorteil dieses Ansatzes ist jedoch, dass Sie diesen Code für eine andere Aktivität wiederverwenden möchten. Sie müssen nicht dieselbe Logik erneut schreiben. Implementieren Sie einfach die Variable MyResultReceiver
in Ihrer Aktivität, überschreiben Sie die Methode und Ihr Wille ist gut.
TIP: Um Daten jeglicher Art abzurufen, ändern Sie die Methodendefinition in der Schnittstelle
vonpublic String getResult();
bispublic Object getResult();
beachten Sie, dass Ihr Fragment vor der Aktivität geladen wird. also musst du die anrufen
tabsmain tabsm=(tabsmain) getActivity();
zeile in onActivityCreated()
Methode
try tabsmain.appContext.lf_ch
gibt diese Variable an.
Auch in dieser Aktivitätsgruppe appContext = this
versuche dies
public boolean lf_ch=false;
public class tabsmain extends Activity{
public static Context appContext;
public void onCreate(Bundle savedInstanceState){
Greifen Sie auf Aktivitätsvariablen in Fragment zu, um ein statisches Schlüsselwort wie folgt zu verwenden:
MainActvity.Java
public static boolean lf_ch=false;
tabquestsFragment.Java
boolean if_value=MainActvity.lf_ch;
Ich hoffe es hilft dir
Versuchen Sie etwas wie dieses:
ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
Sie können die folgende Methode versuchen:
lc.setChecked(((yourpackagename)getActivity()).lf_ch);