Когда я нажимаю на faq или о нас, экран все еще на фрагменте настроек - PullRequest
0 голосов
/ 12 июня 2019

поэтому я пытаюсь создать приложение для университетского проекта, и у меня получилось что-то, что не работает в моем коде, поэтому я создаю боковую панель меню и с некоторыми разделителями, такими как профиль, события, о нас, FAQ, настройки , поделиться и выйти

SideBar

**SideBar**

Итак, я создаю несколько фрагментов

Фрагменты

**Fragments**

Но теперь у меня возникают проблемы с фрагментами о нас и FAQ, когда я нажимаю на нас или FAQ, он переходит к фрагменту настроек, и я не знаю почему? кто-нибудь может мне помочь?

MainActivity.Java

package com.example.readytogo;


import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;


import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Switch;
import android.widget.Toast;

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

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawer;

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

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

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

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        if(savedInstanceState == null){
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new ProfileFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_profile);
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.nav_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new ProfileFragment()).commit();
                break;
            case R.id.nav_events:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new EventsFragment()).commit();
            case R.id.nav_aboutus:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new AboutUsFragment()).commit();
                break;
            case R.id.nav_faq:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new FAQFragment()).commit();
                break;
            case R.id.nav_settings:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SettingsFragment()).commit();
                break;
            case R.id.nav_share:
                Toast.makeText(this, "Share", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_logout:
                Toast.makeText(this, "Logout", Toast.LENGTH_SHORT).show();
                break;
            }
            drawer.closeDrawer(GravityCompat.START);
        return true;
        }



    @Override
    public void onBackPressed(){
        if (drawer.isDrawerOpen(GravityCompat.START)){
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
}

drawer_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="Navigation_view">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_profile"
            android:icon="@drawable/ic_person"
            android:title="Profile" />
        <item
            android:id="@+id/nav_events"
            android:icon="@drawable/ic_event"
            android:title="Events" />
        <item
            android:id="@+id/nav_aboutus"
            android:icon="@mipmap/aboutus"
            android:title="About us" />
        <item
            android:id="@+id/nav_faq"
            android:icon="@mipmap/faq"
            android:title="FAQ" />
        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_settings"
            android:title="Settings" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_share"
                android:title="Share" />
        </menu>
    </item>

    <item android:title="Sign in">
        <menu>
            <item
                android:id="@+id/nav_logout"
                android:icon="@mipmap/arrow"
                android:title="Log out" />
        </menu>
    </item>

</menu>

Ответы [ 4 ]

2 голосов
/ 12 июня 2019

Вам не хватает события клика для FAQ и о нас. Вам нужно добавить ..

case R.id.nav_faq: // the id will be the one you are using in your xml
             getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new FAQFragment()).commit();
                break;

case R.id.nav_about_us: // the id will be the one you are using in your xml
             getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new AboutUsFragment()).commit();
                break;

Добавьте их там, где вы добавили другие события.

1 голос
/ 12 июня 2019

Я не вижу ни одного случая, касающегося вопросов и ответов, внутри onNavigationItemSelected().Кроме того, убедитесь, что вы установили правильный идентификатор для О нас и часто задаваемых вопросах внутри nav_view.xml (не nav_settings), что может быть одной из возможных причин его открытия SettingsFragment.

0 голосов
/ 12 июня 2019

Я прошел обновленные коды. Единственная проблема, которая осталась здесь, заключается в том, что вы забыли добавить break в ваш случай nav_events

case R.id.nav_events:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new EventsFragment()).commit();
break;

Это должно исправить ваш код сейчас, теперь оно должно решить вашу текущую проблему:

фрагмент событий идет о нас все остальное работает только этот фрагмент события не работает

0 голосов
/ 12 июня 2019
make sure you have set correct id for About Us & FAQ inside app>res>menu>
and add these two lines in onNavigationItemSelected Method.I have mentioned below just check and put your id in that switch case

    @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId()){  

  case R.id.nav_profile:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new ProfileFragment()).commit();
    break;
    case R.id.nav_events:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new EventsFragment()).commit();
    break;
    case R.id.about_us:
    Toast.makeText(this, "About us", Toast.LENGTH_SHORT).show();
    break;
    case R.id.faq:
    Toast.makeText(this, "FAQ", Toast.LENGTH_SHORT).show();
    break;
    case R.id.nav_settings:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new SettingsFragment()).commit();
    break;
    case R.id.nav_share:
    Toast.makeText(this, "Share", Toast.LENGTH_SHORT).show();
    break;
    case R.id.nav_logout:
    Toast.makeText(this, "Logout", Toast.LENGTH_SHORT).show();
    break;
    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...