web-dev-qa-db-de.com

Zugriff auf Aktivitätsvariablen von einem Android-Fragment aus

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.

43
Syntax_Error

Versuche dies:

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

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
21
Mark Dail

aktivitätswert in Fragment übernehmen.

((MainActivity) getActivity ()). MGoogleApiClient;

3
Sanjay Goswami

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 

2
Penzzz

Erstellen Sie einen generischen Ergebnisempfänger

 enter image description here

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;
        }

 }

Haftungsausschluss:

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();

0
Rohit Singh

beachten Sie, dass Ihr Fragment vor der Aktivität geladen wird. also musst du die anrufen 

tabsmain tabsm=(tabsmain) getActivity();

zeile in onActivityCreated() Methode

0
The Godfather

try tabsmain.appContext.lf_ch gibt diese Variable an.

Auch in dieser Aktivitätsgruppe appContext = this

0
Sumant

versuche dies

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

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

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

0
Android Geek

Versuchen Sie etwas wie dieses:

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

Sie können die folgende Methode versuchen:

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