用android studio做一个日记APP的导航栏ViewPager2中切换不同fragment,对应导航栏新增日记、个人中心及日记列表
时间: 2023-06-17 11:04:01 浏览: 178
好的,你可以按照以下步骤来实现这个功能:
1. 创建一个新的Android Studio项目,并在项目中添加ViewPager2和TabLayout依赖。
2. 在layout文件夹中创建一个名为activity_main.xml的布局文件,用于显示ViewPager2和TabLayout。
3. 在res文件夹中创建一个名为menu_navigation.xml的菜单文件,用于在导航栏中添加菜单项。
4. 创建三个Fragment,分别用于显示日记列表、添加日记和个人中心。
5. 在MainActivity.java文件中初始化ViewPager2和TabLayout,并将它们绑定在一起。
6. 在onCreateOptionsMenu方法中加载menu_navigation.xml文件,并将菜单项添加到导航栏中。
7. 在onOptionsItemSelected方法中处理菜单项的点击事件,并切换到对应的Fragment。
下面是具体的代码实现:
1. 在build.gradle文件中添加ViewPager2和TabLayout的依赖:
```groovy
dependencies {
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
}
```
2. 在activity_main.xml文件中添加ViewPager2和TabLayout:
```xml
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tab_layout"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
```
3. 在menu_navigation.xml文件中添加菜单项:
```xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/nav_diary_list"
android:title="日记列表"/>
<item
android:id="@+id/nav_add_diary"
android:title="新增日记"/>
<item
android:id="@+id/nav_profile"
android:title="个人中心"/>
</menu>
```
4. 创建三个Fragment,分别为DiaryListFragment、AddDiaryFragment和ProfileFragment。
5. 在MainActivity.java文件中初始化ViewPager2和TabLayout,并将它们绑定在一起:
```java
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.view_pager);
tabLayout = findViewById(R.id.tab_layout);
FragmentPagerAdapter adapter = new FragmentPagerAdapter(this);
adapter.addFragment(new DiaryListFragment());
adapter.addFragment(new AddDiaryFragment());
adapter.addFragment(new ProfileFragment());
viewPager.setAdapter(adapter);
new TabLayoutMediator(tabLayout, viewPager,
(tab, position) -> {
switch (position) {
case 0:
tab.setText("日记列表");
break;
case 1:
tab.setText("新增日记");
break;
case 2:
tab.setText("个人中心");
break;
}
}
).attach();
}
// 添加菜单项
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_navigation, menu);
return true;
}
// 处理菜单项的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.nav_diary_list:
viewPager.setCurrentItem(0);
return true;
case R.id.nav_add_diary:
viewPager.setCurrentItem(1);
return true;
case R.id.nav_profile:
viewPager.setCurrentItem(2);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
```
6. 在DiaryListFragment、AddDiaryFragment和ProfileFragment中分别添加自己的布局文件和逻辑。
这样就完成了一个简单的日记APP的导航栏ViewPager2中切换不同Fragment的功能。
阅读全文