先實(shí)現(xiàn)底部菜單欄
這部分參考B站視頻Springboot:
2022最新版】Android Studio 安裝 Android(安卓)開發(fā)零基礎(chǔ)入門到精通全套教程P118-119
效果圖:
- 忘了需不需要添加依賴了,大概率是本來就有不用添加,但還是把可能有關(guān)的依賴先貼上來
implementation 'androidx.navigation:navigation-fragment:2.3.5'
implementation 'androidx.navigation:navigation-ui:2.3.5'
- 先在res下的menu包里(沒有就建一個(gè)menu包)新建一個(gè)buttom_nav_menu的資源文件(xml文件),代碼為:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/bottom_home"
android:title="@string/bottom_title_home"
android:icon="@drawable/home"/>
<item
android:id="@+id/bottom_notice"
android:title="@string/bottom_title_notice"
android:icon="@drawable/notice"
/>
<item
android:id="@+id/bottom_mine"
android:title="@string/bottom_title_mine"
android:icon="@drawable/person"/>
<item
android:id="@+id/bottom_unfold"
android:title="@string/bottom_title_unfold"
android:icon="@drawable/more"
/>
</menu>
- 然后在HomeActivity的基礎(chǔ)上創(chuàng)建四個(gè)對應(yīng)的fragment文件
- 然后HomeActivity里的代碼
package com.example.academymanageapp.ui;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.content.ClipData;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.MenuItem;
import com.example.academymanageapp.R;
import com.example.academymanageapp.ui.base.BaseActivity;
import com.example.academymanageapp.ui.home.HomeFragment;
import com.example.academymanageapp.ui.mine.MineFragment;
import com.example.academymanageapp.ui.notice.NoticeFragment;
import com.example.academymanageapp.ui.unfold.UnfoldFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class HomeActivity extends BaseActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
private Fragment[] fragments; //fragment數(shù)組,用來存儲(chǔ)底部菜單欄用到的fragment
private int lastFragmentIndex = 0;//切換前的fragment
private int nextFragmentIndex;//切換后的fragment
private int fragmentFlag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void initViews() {
//初始化fragments
fragments = new Fragment[]{new HomeFragment(),new NoticeFragment(), new MineFragment(),new UnfoldFragment()};
//注冊一個(gè)監(jiān)聽,用來監(jiān)聽用戶點(diǎn)擊底部菜單里的哪一個(gè)fragment
BottomNavigationView bottomNavigationView = find(R.id.main_bottom_navigation);
//設(shè)置默認(rèn)的
getSupportFragmentManager().beginTransaction().add(R.id.main_frame,fragments[0]).commit();
}
@Override
protected int getLayoutId() {
return R.layout.activity_home;
}
@Override
//獲得用戶點(diǎn)擊的menuItem
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// item.getItemId();//獲得用戶點(diǎn)擊的部件的Id
item.setChecked(true);//給點(diǎn)中的item設(shè)置checked
switch (item.getItemId()){
case R.id.bottom_home:
switchFragment(0);
break;
case R.id.bottom_notice:
switchFragment(1);
break;
case R.id.bottom_mine:
switchFragment(2);
break;
case R.id.bottom_unfold:
switchFragment(3);
break;
}
return false;
}
//默認(rèn)點(diǎn)擊是home,所以要?jiǎng)?chuàng)建一個(gè)fragment的切換
private void switchFragment(int to){
if (lastFragmentIndex == to){ //如果切換前后一致則不切換
return;
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//如果沒有添加過,則添加對應(yīng)的fragment
if (!fragments[to].isAdded()){
fragmentTransaction.add(R.id.main_frame,fragments[to]);
}else {
fragmentTransaction.show(fragments[to]);//否則就展示出來
}
//添加后將之前的隱藏
fragmentTransaction.hide(fragments[lastFragmentIndex]).commitAllowingStateLoss();
lastFragmentIndex = to;
}
}
- fragment里的代碼:
package com.example.academymanageapp.ui.mine;
import android.view.View;
import androidx.core.content.ContextCompat;
import com.example.academymanageapp.R;
import com.example.academymanageapp.databinding.FragmentMineBinding;
import com.example.academymanageapp.ui.base.BaseFragment;
public class MineFragment extends BaseFragment {
private FragmentMineBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = FragmentMineBinding.inflate(inflater, container, false);
View root = binding.getRoot();
return root;
}
@Override
protected void initViews() {
}
@Override
protected int getLayoutId() {
return R.layout.fragment_mine;
}
}
其他fragment同理
實(shí)現(xiàn)跳轉(zhuǎn)
參考文章:android 如何從activity跳轉(zhuǎn)到另一個(gè)activity下指定的fragment
問題描述:在做畢設(shè)的時(shí)候,需要實(shí)現(xiàn)點(diǎn)擊返回按鈕時(shí)從activityA(即ActivityDetailActivity)返回到進(jìn)入前的界面(可能是fragmentA(即homeFragment),也有可能是fragmentB(即mineFragment),兩者都屬于HomeActivity)。
思路:從ActivityDetailActivity跳轉(zhuǎn)時(shí),帶flag跳轉(zhuǎn),根據(jù)flag跳轉(zhuǎn)到指定的fragment
ActivityDetailActivity部分的代碼:
Intent intent = new Intent();
intent.setClass(ActivityDetailActivity.this,HomeActivity.class);
intent.putExtra("fragment_flag",2);
startActivity(intent);
HomeActivity部分只需要對傳回來的值進(jìn)行一個(gè)判斷,根據(jù)值switch到指定的fragment就好,添加的代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-771345.html
fragmentFlag = getIntent().getIntExtra("fragment_flag",0);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (fragmentFlag){
case 0:
switchFragment(0);
//使對應(yīng)的底部菜單欄的Item處于被點(diǎn)擊的狀態(tài)(即點(diǎn)擊都更改顏色)
bottomNavigationView.setSelectedItemId(R.id.bottom_home);
//調(diào)用底部菜單欄函數(shù),以實(shí)現(xiàn)根據(jù)點(diǎn)擊底部菜單欄實(shí)現(xiàn)fragment的跳轉(zhuǎn)
bottomNavigationView.setOnNavigationItemSelectedListener(this);
//記得加break,否則頁面不會(huì)變化
break;
case 1:
switchFragment(1);
bottomNavigationView.setSelectedItemId(R.id.bottom_notice);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
break;
case 2:
switchFragment(2);
bottomNavigationView.setSelectedItemId(R.id.bottom_mine);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
break;
case 3:
switchFragment(3);
bottomNavigationView.setSelectedItemId(R.id.bottom_unfold);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
break;
}
transaction.commit();
此時(shí)HomeActivity的完整代碼是:文章來源地址http://www.zghlxwxcb.cn/news/detail-771345.html
package com.example.academymanageapp.ui;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.content.ClipData;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.MenuItem;
import com.example.academymanageapp.R;
import com.example.academymanageapp.ui.base.BaseActivity;
import com.example.academymanageapp.ui.home.HomeFragment;
import com.example.academymanageapp.ui.mine.MineFragment;
import com.example.academymanageapp.ui.notice.NoticeFragment;
import com.example.academymanageapp.ui.unfold.UnfoldFragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class HomeActivity extends BaseActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
private Fragment[] fragments; //fragment數(shù)組,用來存儲(chǔ)底部菜單欄用到的fragment
private int lastFragmentIndex = 0;//切換前的fragment
private int nextFragmentIndex;//切換后的fragment
private int fragmentFlag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void initViews() {
//初始化fragments
fragments = new Fragment[]{new HomeFragment(),new NoticeFragment(), new MineFragment(),new UnfoldFragment()};
//注冊一個(gè)監(jiān)聽,用來監(jiān)聽用戶點(diǎn)擊底部菜單里的哪一個(gè)fragment
BottomNavigationView bottomNavigationView = find(R.id.main_bottom_navigation);
fragmentFlag = getIntent().getIntExtra("fragment_flag",0);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (fragmentFlag){
case 0:
switchFragment(0);
//使對應(yīng)的底部菜單欄的Item處于被點(diǎn)擊的狀態(tài)(即點(diǎn)擊都更改顏色)
bottomNavigationView.setSelectedItemId(R.id.bottom_home);
//調(diào)用底部菜單欄函數(shù),以實(shí)現(xiàn)根據(jù)點(diǎn)擊底部菜單欄實(shí)現(xiàn)fragment的跳轉(zhuǎn)
bottomNavigationView.setOnNavigationItemSelectedListener(this);
//記得加break,否則頁面不會(huì)變化
break;
case 1:
switchFragment(1);
bottomNavigationView.setSelectedItemId(R.id.bottom_notice);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
break;
case 2:
switchFragment(2);
bottomNavigationView.setSelectedItemId(R.id.bottom_mine);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
break;
case 3:
switchFragment(3);
bottomNavigationView.setSelectedItemId(R.id.bottom_unfold);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
break;
}
transaction.commit();
//設(shè)置默認(rèn)的
getSupportFragmentManager().beginTransaction().add(R.id.main_frame,fragments[0]).commit();
}
@Override
protected int getLayoutId() {
return R.layout.activity_home;
}
@Override
//獲得用戶點(diǎn)擊的menuItem
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// item.getItemId();//獲得用戶點(diǎn)擊的部件的Id
item.setChecked(true);//給點(diǎn)中的item設(shè)置checked
switch (item.getItemId()){
case R.id.bottom_home:
switchFragment(0);
break;
case R.id.bottom_notice:
switchFragment(1);
break;
case R.id.bottom_mine:
switchFragment(2);
break;
case R.id.bottom_unfold:
switchFragment(3);
break;
}
return false;
}
//默認(rèn)點(diǎn)擊是home,所以要?jiǎng)?chuàng)建一個(gè)fragment的切換
private void switchFragment(int to){
if (lastFragmentIndex == to){ //如果切換前后一致則不切換
return;
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
//如果沒有添加過,則添加對應(yīng)的fragment
if (!fragments[to].isAdded()){
fragmentTransaction.add(R.id.main_frame,fragments[to]);
}else {
fragmentTransaction.show(fragments[to]);//否則就展示出來
}
//添加后將之前的隱藏
fragmentTransaction.hide(fragments[lastFragmentIndex]).commitAllowingStateLoss();
lastFragmentIndex = to;
}
}
到了這里,關(guān)于從一個(gè)Activity跳轉(zhuǎn)到另一個(gè)Activity的指定Fragment,附底部菜單欄的實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!