it-swarm.com.ru

Чтобы начать новое действие в элементе панели навигации, нажмите

Я знаю, что это часто задаваемый вопрос, но после прочтения множества вопросов и решений по переполнению стека я запутался. Я запутался в отношении Fragments и того, что требуется, чтобы начать действие, щелкнув элемент в навигационной панели. 

Я проверил эти сообщения, но только запутался Q1 , Q2

Может ли кто-нибудь объяснить, что требуется для запуска основного действия с помощью этого элемента панели навигации? Нужен ли метод onClick, реализованный там, где это указано в коде? Также, как это относится к Намерению?

Вот мой 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);
}

И вот второе действие, Playboard.Java, которое просто загружает фоновое изображение:

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

Весь вклад высоко ценится спасибо!

12
choloboy

Для каждого оператора case нужно просто указать, какую Activity вы хотите запустить через Intent.

Скажем, например, что вы хотите начать действие Playboard, когда выбран navigation_item_1.

Вы бы добавили этот код к этой конкретной case.

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

Одно слово предупреждения: если у вас есть какие-либо анимации в ящике ящика, запуск действия непосредственно из основного потока приведет к преждевременному завершению анимации и будет выглядеть странно. Чтобы обойти эту проблему, вы можете сделать следующее (код использует retrolambda для красивости, но это не обязательно):

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