it-swarm.com.de

Starten einer neuen Aktivität beim Klicken auf das Navigationselement

Ich weiß, das ist eine häufig gestellte Frage, aber nachdem ich die vielen Fragen und Lösungen zum Stapelüberlauf gelesen habe, bin ich verwirrt. Ich bin verwirrt hinsichtlich Fragments und was erforderlich ist, um eine Aktivität durch Klicken auf ein Element in der Navigationsleiste zu starten. 

Ich habe diese Beiträge überprüft, aber nur verwirrt Q1 , Q2

Könnte jemand bitte erklären, was erforderlich ist, um eine grundlegende Aktivität von diesem Navigationselement aus zu starten? Benötige ich eine onClick-Methode, die im Code angegeben ist? Wie hängt das auch mit der Absicht zusammen?

Hier ist meine MainActivity.Java

import Android.content.res.Configuration;
import Android.os.Bundle;
import Android.support.design.widget.NavigationView;
import Android.support.v4.widget.DrawerLayout;
import Android.support.v7.app.ActionBarDrawerToggle;
import Android.support.v7.app.AppCompatActivity;
import Android.view.Menu;
import Android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

DrawerLayout drawerLayout;
ActionBarDrawerToggle drawerToggle;
NavigationView navigation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initInstances();
}

private void initInstances() {
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    drawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.hello_world, R.string.hello_world);
    drawerLayout.setDrawerListener(drawerToggle);

    navigation = (NavigationView) findViewById(R.id.navigation_view);
    navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            int id = menuItem.getItemId();
            switch (id) {
                case R.id.navigation_item_1:
                    //Do some thing here
                    // add navigation drawer item onclick method here
                    break;
                case R.id.navigation_item_2:
                    //Do some thing here
                    // add navigation drawer item onclick method here
                    break;
                case R.id.navigation_item_3:
                    //Do some thing here
                    // add navigation drawer item onclick method here
                    break;
                case R.id.navigation_item_4:
                    //Do some thing here
                    // add navigation drawer item onclick method here
                    break;
                case R.id.navigation_item_5:
                    //Do some thing here
                    // add navigation drawer item onclick method here
                    break;
            }
            return false;
        }
    });

}

@Override
public void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.navigation_view_items, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.onOptionsItemSelected(item))
        return true;

    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.string.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

Und hier ist die zweite Aktivität, Playboard.Java, die einfach ein Hintergrundbild lädt:

import Android.app.Activity;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;

public class Playboard extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_playboard);
    }
}

Alle Beiträge sehr dankbar danke!

12
choloboy

Für jede Case-Anweisung müssen Sie nur angeben, welches Activity Sie über ein Intent starten möchten.

Angenommen, Sie möchten die Playboard-Aktivität starten, wenn navigation_item_1 ausgewählt ist.

Sie würden diesen Code zu diesem bestimmten case hinzufügen.

case R.id.navigation_item_1:
    Intent i = new Intent(MainActivity.this, Playboard.class);
    startActivity(i);
    break;
12
George Mulligan

Ein Wort der Warnung: Wenn Sie Animationen in der Zeichnungsbox haben, wird das Starten einer Aktivität direkt aus dem Haupt-Thread dazu führen, dass die Animation vorzeitig beendet wird und seltsam aussieht. Um dieses Problem zu umgehen, können Sie Folgendes tun (der Code verwendet retrolambda für die Schönheiten, ist aber nicht notwendig):

Class<? extends Activity> activityClass = null;
switch (menuItem.getItemId()) {
  case R.id.navigation_item_1:
    activityClass = MainActivity.class;
    break;
 }

 final Class<?> finalActivityClass = activityClass;
 Executors.newSingleThreadExecutor().execute(() -> {
   Intent intent = new Intent(getApplicationContext(), finalActivityClass);
   startActivity(intent);
 });

 menuItem.setChecked(true);
 mDrawerLayout.closeDrawers();
0
xtro