Android Studio - Wie füge Ich einer App mit Slide-In Menü eine Activity hinzu

  • Antworten:4
Col.Biernot
  • Forum-Beiträge: 30

14.10.2015, 11:41:39 via Website

Hallo,

Ich habe in Android Studio eine App mit Slide-In Menü erstellt. Die MainActivity beinhaltet eine Liste welche Datensätze, die eingegeben werden darstellen soll. So weit so gut.
Jetzt möchte Ich durch klicken eines "Button" im selbigen Menü eine weitere Activity öffnen um dort die Datensätze einzutragen. Dies realisiere Ich durch:

        Intent AddData = new Intent(MainActivity.this, AddDataActivity.class);
        MainActivity.this.startActivity(AddData);

So wird allerdings die Activity im Vollbild geöffnet und Ich habe keinen Zugriff mehr auf das Slide-In Menü.
Wie kann Ich das Menü "Activityübergreifend" realisieren?

MfG
Col.Biernot

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.10.2015, 13:19:31 via App

Entweder du kopierst den code des Menüs in jede neue Activity oder du erstellt dir eine Menü Klasse die du aus jeder Aktivity nur noch initialisieren musst und fertig
Ich würde das 2.nehmen entspricht mehr dem Gedanken von OOP.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Col.Biernot
  • Forum-Beiträge: 30

14.10.2015, 14:26:26 via Website

Erstmal Danke für die Antwort.
Ich stehe gerade etwas auf dem Schlauch. Bin noch noch im Thema Android Entwicklung und weiß nicht genau wie Ich das Menü auslagere. Kannst du mir evtl einen Tipp geben? (Und nein Ich hoffe nicht auf eine vorgefertigte Lösung :D)

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.scanbutton);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    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.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    //Aufrufen der Bisher gescannten Liste
    if (id == R.id.nav_listview) {

    // Aufrufen der Activity zum manuellen hinzufügen eines Datensatzes
    } else if (id == R.id.nav_add_data) {



    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

}

EDIT: An anderer Stelle sagte man mir es sei sinnvoller Fragments zu benutzen. Kann mir das jemand bestätigen?

— geändert am 14.10.2015, 14:54:36

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.10.2015, 16:03:39 via Website

Das mit den Fragments kommt immer auf den Verwendungszweck an.
Dafür gibt es aber kein Patentrezept also musst du selber entscheiden was du machst.
Ich mache es so, dass ich für Module die Thematisch zusammengehören Fragments benutzte und für extra sachen di da nicht reinpassen mache ich eine neue Activity (welche aber auch weider Fragments haben kann).
ich habe mir mal sowas geschreiben, ist aber auch schon wieder so eine weile her.
Du musst nur den Code in der OnCreate in eine Klasse auslagern und diese dann von Überall aufrufen.
Dass was dann noch fehlt, ist eine Fallunterscheidung welches Intent gestartet werden soll.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Seilbahn
  • Forum-Beiträge: 40

24.09.2017, 15:17:03 via Website

Ich stecke grad genauso fest wie du damals. Gibts auch ne vorgefertigte lösung?

Antworten