繁体   English   中英

如何使用导航抽屉和viewpager/viewpager2在java中制作android应用程序

[英]how to make android app in java using navigation drawer and viewpager/viewpager2

你好,我正在使用 Java 制作一个应用程序在 android studio 中进行辩论,我打算该应用程序占用一个导航抽屉和一个 viewpager/viewpager2。 我是 androidstudio 中非常新的编程,因此我已经按照几个视频教程将 viewpager / viepager 2 与导航抽屉结合起来,但到目前为止没有一个对我有用(导航抽屉只对我有用),我尝试的最后一件事是使用 viewpager (自从使用 viepager 2 以来,我在从主调用适配器时遇到问题),但是在编译项目时,模拟器出现黑屏并且没有显示任何内容。 我希望你能帮助我,因为这个项目对我来说非常重要。 这是我的代码的一部分:

主要的:

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 androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;


import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;

import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.navigation.NavigationView;
import com.google.android.material.tabs.TabItem;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

import Fragments.generaDebate;
import Fragments.perfil_user;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    DrawerLayout drawerLayout;
    ActionBarDrawerToggle actionBarDrawerToggle;
    Toolbar toolbar;
    NavigationView navigationView;
    //variables para cargar el fragment
    FragmentManager fragmentManager;
    FragmentTransaction fragmentTransaction;
    String personName;
    //variable viewpager
    ViewPager pager;
    TabLayout tablayout;
    TabItem first_item,second_item;
    pageAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar=findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);//se pasa el toolbar
        drawerLayout=findViewById(R.id.drawer);
        navigationView=findViewById(R.id.navigationView);
        navigationView.setNavigationItemSelectedListener(this);
        actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.open,R.string.close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
        actionBarDrawerToggle.syncState();
        //carga viewpager
        pager=findViewById(R.id.view);
        tablayout=findViewById(R.id.title_menu);
        first_item=findViewById(R.id.first_item);
        second_item=findViewById(R.id.second_item);
        //declarando adapter en el main
        FragmentManager fragmentManager;
        fragmentManager=getSupportFragmentManager();
        adapter=new pageAdapter(fragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT,tablayout.getTabCount());
        pager.setAdapter(adapter);
        tablayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                pager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
        pager.addOnAdapterChangeListener((ViewPager.OnAdapterChangeListener) new TabLayout.TabLayoutOnPageChangeListener(tablayout));
        //cargar fragment principal
        FragmentTransaction fragmentTransaction;
        fragmentTransaction=fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.container, new perfil_user());
        fragmentTransaction.commit();



    }


    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == R.id.user){
            FragmentManager fragmentManager;
            FragmentTransaction fragmentTransaction;
            fragmentManager=getSupportFragmentManager();
            fragmentTransaction=fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container, new perfil_user());
            fragmentTransaction.commit();

        }
        else if (item.getItemId() == R.id.exit){
            //finish();
            loggin login=new loggin();
            login.signOut();
        }
        //aquí van las otros fragment
        drawerLayout.closeDrawer(GravityCompat.START);
        return false;
    }
}

适配器:

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;

import java.util.ArrayList;

import Fragments.generaDebate;
import Fragments.perfil_user;


public class pageAdapter extends FragmentPagerAdapter {
    private int tabsNumber;

    public pageAdapter(@NonNull FragmentManager fm, int behavior,int tabs) {
        super(fm, behavior);
    }


    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 1:
                return new perfil_user ();
            case 2:
                return new generaDebate();
            default:
                return null;

        }
    }

    @Override
    public int getCount() {
        return tabsNumber;
    }
}

导航抽屉是安卓提供的最常见的功能,导航抽屉是一个 UI 面板,用于显示您的应用程序的主导航菜单。 它也是重要的 UI 元素之一,它提供了用户更喜欢的操作,例如更改用户配置文件、更改应用程序的设置等。在本文中,它已经逐步讨论了在 android 中实现导航抽屉

活动_main.xml

 <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout 
    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:background="@color/bgColor"
    android:layout_height="match_parent"
    tools:context=".activities.MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:elevation="0dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:gravity="center_vertical"
            android:background="@color/bgColor"
            android:paddingStart="20dp"
            android:paddingEnd="20dp"
            android:orientation="horizontal">

        </LinearLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/vp_horizontal_ntb"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="?android:attr/windowBackground"
        android:foreground="?attr/selectableItemBackground"
        app:menu="@menu/bottom_navigation"
        app:elevation="10dp"
        app:labelVisibilityMode="labeled"
        app:itemIconTint="@color/bottom_navigation_color"
        app:itemTextColor="@color/bottom_navigation_color"
        app:itemBackground="@color/bottomNavigationBackground"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

菜单文件

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/navigationMenu"
        android:icon="@android:drawable/ic_menu_sort_by_size"
        android:title="Menu" />

    <item
        android:id="@+id/navigationMyCourses"
        android:icon="@drawable/ic_email"
        android:title="Courses" />

    <item
        android:id="@+id/navigationHome"
        android:icon="@drawable/ic_home"
        android:title="Home" />

    <item
        android:id="@+id/m_refer"
        android:icon="@android:drawable/ic_menu_share"
        android:title="Refer" />

    <item
        android:id="@+id/navigationMyProfile"
        android:icon="@drawable/ic_back"
        android:title="User" />
</menu>

ViewPagerAdapter.java

    public class ViewPagerAdapter extends FragmentStateAdapter {

    public ViewPagerAdapter(@NonNull @NotNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    @NonNull
    @NotNull
    @Override
    public Fragment createFragment(int p) {

        switch (p) {

            case 0:
                return new ProfileFragment();
            case 1:
                return new LeaderBoardFragment();
            case 2:
                return new HomeFragment();
            case 3:
                return new ReferFragment();
            case 4:
                return new ProfileFragment();
            default:
                return new HomeFragment();

        }
    }

    @Override
    public int getItemCount() {
        return 5;
    }
}

主活动.java

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

        initView();
  }

    private void initView() {
        this.viewPager2 = findViewById(R.id.vp_horizontal_ntb);
        viewPager2.setOffscreenPageLimit(100);
        this.bottomNavigationView = findViewById(R.id.navigation);
        adapter = new ViewPagerAdapter(this);
        viewPager2.setAdapter(adapter);

        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);

                switch (position) {
                    case 0:
                        bottomNavigationView.getMenu().findItem(R.id.navigationMenu).setChecked(true);
                        break;

                    case 1:
                        bottomNavigationView.getMenu().findItem(R.id.navigationMyCourses).setChecked(true);
                        break;

                    case 2:
                        bottomNavigationView.getMenu().findItem(R.id.navigationHome).setChecked(true);
                        break;

                    case 3:
                        bottomNavigationView.getMenu().findItem(R.id.m_refer).setChecked(true);
                        break;

                    case 4:
                        bottomNavigationView.getMenu().findItem(R.id.navigationMyProfile).setChecked(true);
                        break;

                }
            }
        });


        bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @SuppressLint("NonConstantResourceId")
            @Override
            public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {

                switch (item.getItemId()) {
                    case R.id.navigationHome:
                        viewPager2.setCurrentItem(2);
                        break;
                    case R.id.navigationMyProfile:
                        viewPager2.setCurrentItem(4);
                        break;
                    case R.id.m_refer:
                        viewPager2.setCurrentItem(3);
                        break;
                    case R.id.navigationMyCourses:
                        viewPager2.setCurrentItem(1);
                        break;
                    case R.id.navigationMenu:
                        viewPager2.setCurrentItem(0);
                        break;
                }
                return false;
            }
        });

        CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bottomNavigationView.getLayoutParams();
        layoutParams.setBehavior(new BottomNavigationBehavior());
        bottomNavigationView.setSelectedItemId(R.id.navigationMenu);
    }
}

快乐编码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM