fragment_first
FirstFragment
package com.etime.myproject;
import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
public class FirstFragment extends Fragment {
private Button mButton;
private Context mContext;
public FirstFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 依据Fragment布局文件生成其对应View
View view=inflater.inflate(R.layout.fragment_first, container, false);
// 从View中找到Button
mButton=(Button)view.findViewById(R.id.button);
// 为Button设置点击事件
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mContext=getContext();
Toast.makeText(mContext,"Hello Fragment",Toast.LENGTH_LONG).show();
}
});
//返回FragView的View
return view;
}
}
fragment_second.xml
SecondFragment
package com.etime.myproject;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
public class SecondFragment extends Fragment {
private Button mButton;
private Context mContext;
public SecondFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 依据Fragment布局文件生成其对应View
View view=inflater.inflate(R.layout.fragment_second, container, false);
// 从View中找到Button
mButton=(Button)view.findViewById(R.id.button);
// 为Button设置点击事件
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mContext=getContext();
Toast.makeText(mContext,"Hello Fragment",Toast.LENGTH_LONG).show();
}
});
//返回FragView的View
return view;
}
}
fragment_third.xml
ThirdFragment
package com.etime.myproject;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
public class ThirdFragment extends Fragment {
private Button mButton;
private Context mContext;
public ThirdFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 依据Fragment布局文件生成其对应View
View view=inflater.inflate(R.layout.fragment_third, container, false);
// 从View中找到Button
mButton=(Button)view.findViewById(R.id.button);
// 为Button设置点击事件
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mContext=getContext();
Toast.makeText(mContext,"Hello Fragment",Toast.LENGTH_LONG).show();
}
});
//返回FragView的View
return view;
}
}
build.gradle
implementation 'com.google.android.material:material:1.0.0'
menu_bottom_tab.xml
selector_bnv_color.xml
activity_main.xml
MainActivity
package com.etime.myproject;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.bottomnavigation.BottomNavigationView;
/**
* 注意事项:
* 1、MainActivity继承自AppCompatActivity
* 2、与ViewPager相关的东西均在androidx包下
* 3、添加依赖 implementation 'com.google.android.material:material:1.0.0'
* 否则无法使用BottomNavigationView
*/
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private Context mContext;
private BottomNavigationView mBottomNavigationView;
private NavigationItemSelectedListenerImpl mNavigationItemSelectedListenerImpl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
public void init(){
mContext=this;
mViewPager=(ViewPager) findViewById(R.id.viewPager);
FragmentManager fragmentManager=getSupportFragmentManager();
//设置ViewPager的Adapter
ViewPagerAdapter adapter=new ViewPagerAdapter(fragmentManager,FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
mViewPager.setAdapter(adapter);
//设置ViewPager的翻页监听器
PageChangeListenerImpl listener=new PageChangeListenerImpl();
mViewPager.addOnPageChangeListener(listener);
//设置BottomNavigationView导航监听
mBottomNavigationView=findViewById(R.id.bottomNavigationView);
mNavigationItemSelectedListenerImpl=new NavigationItemSelectedListenerImpl();
mBottomNavigationView.setOnNavigationItemSelectedListener(mNavigationItemSelectedListenerImpl);
}
//ViewPager适配器ViewPagerAdapter
private class ViewPagerAdapter extends FragmentPagerAdapter{
FirstFragment firstFragment=new FirstFragment();
SecondFragment secondFragment=new SecondFragment();
ThirdFragment thirdFragment=new ThirdFragment();
private Fragment[] fragments = new Fragment[]{firstFragment,secondFragment,thirdFragment};
public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragments[position];
}
@Override
public int getCount() {
return fragments.length;
}
}
//ViewPager翻页监听器ViewPager.OnPageChangeListener
private class PageChangeListenerImpl implements ViewPager.OnPageChangeListener{
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int position) {
//切换BottomNavigationView相应位置的item的选中状态
Menu menu=mBottomNavigationView.getMenu();
MenuItem menuItem = menu.getItem(position);
menuItem.setChecked(true);
}
@Override
public void onPageScrollStateChanged(int i) {
}
}
//BottomNavigationView导航监听BottomNavigationView.OnNavigationItemSelectedListener
private class NavigationItemSelectedListenerImpl implements BottomNavigationView.OnNavigationItemSelectedListener{
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int itemId = item.getItemId();
//切换ViewPager的页面
switch (itemId){
case R.id.tab_home:
mViewPager.setCurrentItem(0);
break;
case R.id.tab_device:
mViewPager.setCurrentItem(1);
break;
case R.id.tab_setting:
mViewPager.setCurrentItem(2);
break;
}
return false;
}
}
}