Android Навигационный ящик щелкает по событию - PullRequest
0 голосов
/ 13 января 2020

Я создаю приложение, которое содержит активность «Навигационный ящик». Я загружаю разные фрагменты на главном экране. Теперь, когда мне нужно вызвать Fragment в то время, он работает нормально, но когда я хочу вызвать какую-то услугу, такую ​​как call, средство выбора изображений в то время я добавил setNavigationItemSelectedListener, который работает нормально, но все остальные фрагменты не загружаются сейчас.

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

        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_franchise,
                R.id.nav_tieUP, R.id.nav_giftVoucher, R.id.nav_faq, R.id.nav_privacy_policy,
                R.id.nav_tools, R.id.nav_send)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

                int id = menuItem.getItemId();
                if (id == R.id.callUs) {
                    Intent intent = new Intent(Intent.ACTION_CALL);

                    intent.setData(Uri.parse("tel:" + "XXXxxxXXX"));

                    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},REQUEST_PHONE_CALL);
                    }
                    else
                    {
                        startActivity(intent);
                    }
                }

                drawer.closeDrawer(GravityCompat.START);
                return true;
            }
        });

    }

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Когда вы звоните NavigationUI.setupWithNavController(navigationView, navController), вы говорите, что хотите, чтобы NavController обрабатывал события щелчка в NavigationView, переходя к соответствующему экрану согласно документации NavigationUI . Это, по необходимости, вызывает setNavigationItemSelectedListener() внутри.

Позвонив по номеру setNavigationItemSelectedListener, вы удаляете первоначального слушателя, поэтому другие ваши элементы больше ничего не делают. Вы можете запустить поведение по умолчанию, вызвав NavigationUI.onNavDestinationSelected()

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

    int id = menuItem.getItemId();
    if (id == R.id.callUs) {
        Intent intent = new Intent(Intent.ACTION_CALL);

        intent.setData(Uri.parse("tel:" + "XXXxxxXXX"));

        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},REQUEST_PHONE_CALL);
        }
        else
        {
            startActivity(intent);
        }
   }
   else
   {
       // Make your navController object final above
       // or call Navigation.findNavController() again here
       NavigationUI.onNavDestinationSelected(menuItem, navController);
   }
   drawer.closeDrawer(GravityCompat.START);
   return true;

}

0 голосов
/ 13 января 2020

Я попытался сделать фрагмент и сделал ящик вот мой код:

import android .support.v4.app.FragmentManager;

import android .support. v4.app.Fragment;

import android .content.res.Configuration;

import android .support.design.widget.Snackbar;

import android .support.v4.widget.DrawerLayout;

import android .support.v7.app.ActionBarDrawerToggle;

import android .support.v7.app.AppCompatActivity;

import android .os.Bundle;

import android .util.Log;

import android .view.Menu;

import android .view.MenuItem;

import android .support.v7.widget.Toolbar;

import android .support.design.widget.NavigationView;

import android .view.View;

import android .widget.LinearLayout;

import android .widget.RelativeLayout;

publi c класс MainActivity расширяет AppCompatActivity, реализует View.OnClickListener, NavigationView.OnNavigation ItemSelectedListener {

приватная панель инструментов mToolBar;

приватный NavigationView mDrawer;

приватный ActionBarDrawerToggle mdrawerToggle;

приватный DrawerLayout mDrawerLayout;

*4444* 1043 * * digitalFrontier;

приватный RelativeLayout forwardThinkers;

приватный RelativeLayout preredActions;

приватный LinearLayout innerParent;

publi c String viewVar;

@ Переопределить защищенный void onCreate (Bundle saveInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


initViews();

digitalFrontier.setOnClickListener(this);

forwardThinkers.setOnClickListener(this);

preferedActions.setOnClickListener(this);

}

@ Переопределить publi c логический onCreateOptionsMenu (меню Меню) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.menu_main, menu);

return true;

}

@ Override publi c логический onOptionsItemSelected (элемент MenuItem) {

// 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.id.action_settings) {

    return true;

}

return super.onOptionsItemSelected(item);

}

@ Override publi c void onConfigurationChanged (Configuration newConfig) {

super.onConfigurationChanged(newConfig);

mdrawerToggle.onConfigurationChanged(newConfig);

}

private void initViews () {

mToolBar = (Toolbar) findViewById(R.id.app_bar);

setSupportActionBar(mToolBar);

mDrawer = (NavigationView) findViewById(R.id.main_drawer);

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_parent);

mdrawerToggle = new ActionBarDrawerToggle(

        this,
        mDrawerLayout,
        mToolBar,
        R.string.drawer_open,
        R.string.drawer_close);

mDrawerLayout.setDrawerListener(mdrawerToggle);

// indicator based on whether the drawerlayout is in open or closed

mdrawerToggle.syncState();

digitalFrontier = (RelativeLayout) findViewById(R.id.digital_frontier);

forwardThinkers = (RelativeLayout) findViewById(R.id.forward_thinkers);

preferedActions = (RelativeLayout) findViewById(R.id.prefered_actions);

innerParent = (LinearLayout) findViewById(R.id.inner_parent);

mDrawer.setNavigationItemSelectedListener(this);

}

@ Override publi c void onClick (View v) {

if(v.getId() == R.id.digital_frontier || v.getId() == R.id.forward_thinkers ||

        v.getId() == R.id.prefered_actions ){

    detailActivity(v);
}

}

* 1 084 * private void detailActivity (Просмотр представления) {
switch (view.getId()){

    case R.id.digital_frontier:

        viewVar = "digital frontier";

        break;
    case R.id.forward_thinkers:

        viewVar = "forward thinkers";
        break;

    case R.id.prefered_actions:

        viewVar = "prefered actions";
        break;
}

Snackbar.make(mDrawerLayout, viewVar , Snackbar.LENGTH_LONG).show();

}

@ Override publi c логический onNavigationItemSelected (MenuItem menuItem) {

selectDrawerItem(menuItem);

return false;

}

publi c void selectDrawerItem (MenuItem menuItem) {

// Create a new fragment and specify the planet to show based on
// position
Fragment fragment = null;

Class fragmentClass = null;

switch(menuItem.getItemId()) {

    case R.id.agency_menu_item:

        fragmentClass = FragmentAgency.class;

        break;
}

try {
    fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
    e.printStackTrace();
}

// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = this.getSupportFragmentManager();

fragmentManager.beginTransaction().replace(R.id.fragment_content, 

фрагмент) .commit ();

// Highlight the selected item, update the title, and close the drawer
menuItem.setChecked(true);

setTitle(menuItem.getTitle());

//mDrawer.closeDrawers();

}

...