Добавление по умолчанию окна навигации в NewActivity - PullRequest
0 голосов
/ 27 апреля 2020

Я создал новый проект с ящиком по умолчанию в версии 3.5.1. Я создаю новую активность (ProfileActivity), мне также нужен ящик MainActivity.

Он открывает HomeFragment, когда я пытаюсь открыть ProfileActivity из панели навигации. Да, я дал верный идентификатор.

Пытаясь сделать это месяцами, но этого не происходит, на этот раз может сдаться. везде они дают решение о фрагменте.

Я попробовал в

ProfileActivity

@Override
protected void onCreate(Bundle savedInstanceState)
{
    // TODO Auto-generated method stub
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LayoutInflater inflater = (LayoutInflater) this
                .getSystemService( Context.LAYOUT_INFLATER_SERVICE);
        View contentView = inflater.inflate(R.layout.activity_profile, null, false);
        final TextView textView = contentView.findViewById( R.id.text_gallery );
        drawer.addView(contentView, 0);
    }
}

и сделал ящик защищенным

Он открывает HomeFragment при попытке открыть ProfileActivity из ящика навигации. Да, я дал правильный идентификатор

<item
            android:id="@+id/profileActivity"
            android:icon="@drawable/ic_menu_manage"
            android:title="Profile" />

Моя основная активность выглядит следующим образом

package com.example.iqhut;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import android.view.View;

import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.view.ViewCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.google.android.material.navigation.NavigationView;

import androidx.drawerlayout.widget.DrawerLayout;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.Menu;
import android.widget.RelativeLayout;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration mAppBarConfiguration;
    protected DrawerLayout drawer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        Toolbar toolbar = findViewById( R.id.toolbar );
        setSupportActionBar( toolbar );
        FloatingActionButton fab = findViewById( R.id.fab );
        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();
            }
        } );
        drawer = findViewById( R.id.drawer_layout );
        NavigationView navigationView = findViewById( R.id.nav_view );
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
                R.id.nav_tools, R.id.nav_share, R.id.nav_send, R.id.profileActivity )
                .setDrawerLayout( drawer )
                .build();
        NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
        NavigationUI.setupActionBarWithNavController( this, navController, mAppBarConfiguration );
        NavigationUI.setupWithNavController( navigationView, navController );

    }

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

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
        return NavigationUI.navigateUp( navController, mAppBarConfiguration )
                || super.onSupportNavigateUp();
    }
}

1 Ответ

0 голосов
/ 27 апреля 2020

Если вы хотите отключить DrawerLayout, нет необходимости использовать отдельное действие. Вместо этого вы можете прослушивать события навигации и отключить DrawerLayout, когда находитесь в профиле назначения:

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
   @Override
   public void onDestinationChanged(@NonNull NavController controller,
           @NonNull NavDestination destination, @Nullable Bundle arguments) {
       if(destination.getId() == R.id.profileFragment) {
           drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
       } else {
           drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
       }
   }
});
...