Как я могу нажать кнопку на вкладке табуляции и получить доступ к меню панели прокрутки вместо представления - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть приложение для Android с этим снимком экрана enter image description here

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

здесь мой action_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="MainActivity">


    <FrameLayout
       android:id="@+id/container"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />


   <com.google.android.material.bottomnavigation.BottomNavigationView
      android:id="@+id/navigationView"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="@color/colorPrimary"
      app:itemBackground="?selectableItemBackgroundBorderless"
      app:itemHorizontalTranslationEnabled="true"
      android:layout_alignParentBottom="true"
      app:menu="@menu/bottom_nav"
      app:itemIconTint="@drawable/nav_item_color_state"
      app:itemTextColor="@drawable/nav_item_color_state" />


  </RelativeLayout>

MainActivity.java

        package com.example.bottomnavigationfromempty;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;
    import android.view.MenuItem;

    import androidx.appcompat.app.ActionBar;
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentTransaction;


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

    public class MainActivity extends AppCompatActivity {

        private BottomNavigationView bottomNavigationView;

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

            toolbar = getSupportActionBar();
            BottomNavigationView navigationView = findViewById(R.id.navigationView);
            navigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
            toolbar.setTitle("Uno");

            loadFragment(new UnoFragment());


        }
        BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener =
                new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch (menuItem.getItemId()) {
                    case R.id.uno:
                        toolbar.setTitle("Uno");
                        loadFragment(new UnoFragment());
                        return true;
                    case R.id.dos:
                        toolbar.setTitle("Dos");
                        loadFragment(new DosFragment());
                        return true;
                    case R.id.tres:
                        toolbar.setTitle("Tres");
                        loadFragment(new TresFragment());
                        return true;
                    case R.id.cautro:
                        toolbar.setTitle("Cautro");
                        loadFragment(new CautroFragment());
                        return true;
                }
                return false;
            }
        };

        private void loadFragment(Fragment fragment) {
            // load fragment
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.container, fragment);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    }

У меня есть 4 файла, которые называются фрагмент_фрагмент.xml, фрагмент_дос.xml, фрагмент_трес.xml и фрагмент.cautro.xml

Они все одинаковые, так что вот фрагмент_uno.xml

<?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="DosFragment">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Dos"
            android:gravity="center"
            android:textSize="20dp"
            android:textColor="#000" />

    </FrameLayout>

вот код Java UnoFragment.xml

        package com.example.bottomnavigationfromempty;

    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;

    public class UnoFragment extends Fragment {

        // required default empty constructor
        public UnoFragment() {

        }

        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_uno, container, false);
        }
    }

У меня есть файл bottom_nav.xml в папке меню в разделе res, как этот

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

        <item
            android:id="@+id/uno"
            android:icon="@drawable/ic_extension_black_24dp"
            android:title="Uno" />

        <item
            android:id="@+id/dos"
            android:icon="@drawable/ic_flare_black_24dp"
            android:title="Dos" />

        <item
            android:id="@+id/tres"
            android:icon="@drawable/ic_motorcycle_black_24dp"
            android:title="Tres" />

        <item
            android:id="@+id/cautro"
            android:icon="@drawable/ic_toys_black_24dp"
            android:title="Cautro" />
    </menu>

IКонечно, также нужно было добавить изображения в Drawable здесь меню для bottom_nav.xml для нижней навигации

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

        <item
            android:id="@+id/uno"
            android:icon="@drawable/ic_extension_black_24dp"
            android:title="Uno" />

        <item
            android:id="@+id/dos"
            android:icon="@drawable/ic_flare_black_24dp"
            android:title="Dos" />

        <item
            android:id="@+id/tres"
            android:icon="@drawable/ic_motorcycle_black_24dp"
            android:title="Tres" />

        <item
            android:id="@+id/cautro"
            android:icon="@drawable/ic_toys_black_24dp"
            android:title="Cautro" />
    </menu>

Это в значительной степени это.

То, что я не знаю, как это сделать, это следующее: у меня есть user_menu.xml, к которому я хочу получить доступ через один из значков вкладок из нижней вкладки навигации

Сейчас онитолько вернуть вид. Как получить доступ к скользящему ящику пользователя user_menu только из одного из них? Этот код на самом деле из другого приложения, которое я создал, который использует макет ящика. вот навигация_меню.xml

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

        <item android:id="@+id/account"
            android:icon="@drawable/ic_profile"
            android:title="My Profile" />

        <item android:id="@+id/settings"
            android:icon="@drawable/ic_settings"
            android:title="Settings" />

        <item android:id="@+id/edit"
            android:icon="@drawable/ic_edit"
            android:title="Edit" />

    </menu>

обычно я использую подобный код в MainActivity.java в методе onCreate

dl = (DrawerLayout)findViewById(R.id.activity_main);
    t = new ActionBarDrawerToggle(this, dl, R.string.Open, R.string.Close);

    dl.addDrawerListener(t);
    t.syncState();

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Это другое приложение также имеет вложенный навигационный файл_меню.xmlстраницы макета, как это. В этом случае он называется activity_main, поскольку это другое приложение.

        <?xml version="1.0" encoding="utf-8"?>

    <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_green_dark">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Main"
                android:textSize="50dp"
                android:id="@+id/textview"
                android:layout_marginTop="200dp"
                android:layout_marginLeft="130dp" />

        </RelativeLayout>

        <com.google.android.material.navigation.NavigationView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            app:menu="@menu/navigation_menu"
            android:layout_gravity="start"
            android:id="@+id/nv" />

    </androidx.drawerlayout.widget.DrawerLayout>

Я не уверен, как их объединить, чтобы у меня была страница макета со встроенным user_menu, и все же она вызывается, когда вызывается один из нижних значков навигации, который вызывает макет ящикапереключать вместо возврата вид ---- просто сохраняет последний вид

enter image description here

...