Ich habe schon eine ähnliche Frage gestellt und keine Antwort bekommen und viele andere Leute suchen nach einer Antwort. Ich poste diese Frage, um hoffentlich eine klare Antwort zu erhalten, von der jeder profitieren kann.
Ich habe eine Aktivität mit 2 Fragmenten. Ich möchte, dass fragment2 eine boolesche Variable in Activity setzt, wenn ein Kontrollkästchen aktiviert ist, damit fragment1 wissen kann, ob das Kontrollkästchen aktiviert wurde.
Das ist mein Code:
Aktivität:
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);
}
Fragment 1: (Wo ich den booleschen Wert lesen möchte, wenn oben in Akitivität eingestellt:
@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
Fragment 2: Wo ich lf in Activity setzen möchte
.....
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
;
}
});
Der Code wird nicht kompiliert, und ich weiß nicht, wie ich die Aktivität einstellen oder lesen soll. Jemand schlug vor, dass ich getActivity () mache, aber ich kann die Variable nicht sehen.
Ich habe versucht, eine Funktion setlf (boolean jk) zu erstellen, aber ich kann sie auch nicht sehen ...
Jede Hilfe ist willkommen :)
Viele Möglichkeiten :
1) Aktivität -> Fragment
2) Aktivität -> Fragment
In Ihrem Fragment: Erstellen Sie eine öffentliche Methode
In Ihrer Aktivität: Rufen Sie eine öffentliche Methode mit active -Fragment auf:
getSupportFragmentManager () . findFragmentById (R.id.Ihr_Fragment) .publicMethod (args)
3) Fragment -> Aktivität
4) Fragment -> Aktivität
In Ihrem Fragment: Öffentlicher Aktivitäts-Getter, Setter oder andere Methoden, die Folgendes verwenden:
getActivity () . getSomething (), getActivity () . setSomething (args) oder getActivity () . someMethod (args)
Sie können Daten zwischen Fragmenten auf zwei Arten übergeben:
Zuerst können Sie dies tun, indem Sie setArguments (...) und getArguments (....) verwenden.
Zweitens können Sie dies mit Rückruf tun
Sie können auch EventBus verwenden. Es ist wirklich einfach https://github.com/greenrobot/EventBus
Verwenden Sie auf keinen Fall statische Methoden wie meine alte Antwort :)