Hi,
Wenn ich mein Problem richtig verstehe muss über eine Activity ausserhalb des FrameLayout auf ein Fragment zugreifen.
ein Fragment läuft nie alleine es läuft immer in einer Activity. Meist die MainAcktivity in der auch der Navdrawer läuft. Die Activity wird also nicht beendet. Clickevents kommen in der Activity an und müssen an die FragmentKlasse weitergereicht werden. deshalb importiern des Listner und getActivity für den bezug zu übergeordnenden Activity.
Nur wieso willst du eine andere Activity starten? Dies würdest du mit einen Intent machen und da würde deine Mainactivity beendet. und dein schöner Navdrawer währe auch weg.
führe doch in der onCreate die entsprechende TransAction aus zu deinen Start Fragment aus.
PS. Habe mir deinen Quellcode angesehen, und gemerkt das du gar keine Button ... in den Fragments hast. Somit brauchst du den Listner auch nicht. Solltest du einen Button im Fragment brauchen weisst du nun wie die OnClick Methode erstellst.
Ich glaube das mit dem Frame Layout verstehst du etwas falsch. Dies dient nur als Container Platzhalter für die Layouts die in den Fragment Klasse geladen werde. Es wird somit immer nur der Platzhalter "content_main.xml" mit dem Layout des Fragments gefüllt.
dein Activity_main.xml bleibt somit die ganze zeit geladen.
Sinnvoll ist auch im NavDrawer zuprüfen ob das jeweilige Fragment schon geladen ist.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
Fragment fragment = new WelcomeFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.screen_area, fragment);
ft.commit();
}
Alles anzeigen