主界面实现页面切换
# 领券联盟-主界面实现页面切换
我们前面做好了底部的导航栏
领券联盟-页面分析以及导航栏的实现 (opens new window)
接下来我们就要创建上部分内容,要填坑了。
拿什么填坑呢?
我们使用fragment
# 创建fragment
首先我们有一个基类
package com.sunofbeaches.taobaounion.base;
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 abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup
container,@Nullable Bundle savedInstanceState) {
return loadRootView(inflater,container,savedInstanceState);
}
protected View loadRootView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
int resId = getRootViewResId();
return inflater.inflate(resId,container,false);
}
protected abstract int getRootViewResId();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
接着,创建HomeFragment、RedPacketFragment、SearchFragment、SelectedFragment
目前来说,没有太多的代码,只是返回一个布局资源id即可。
比如说HomeFragment.java
package com.sunofbeaches.taobaounion.ui.fragment;
import com.sunofbeaches.taobaounion.R;
import com.sunofbeaches.taobaounion.base.BaseFragment;
public class HomeFragment extends BaseFragment {
@Override
protected int getRootViewResId() {
return R.layout.fragment_home;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
布局也是空布局
只是有一个文字说明是哪个界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="首页" />
</LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 主界面代码
我们使用了ButterKinfe,直接在onCreate的时候绑定
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initFragments();
initListener();
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
那么控件就可以使用注解的方式注入了
@BindView(R.id.main_navigation_bar)
public BottomNavigationView mNavigationView;
1
2
2
创建fragment
private void initFragments() {
mHomeFragment = new HomeFragment();
mRedPacketFragment = new RedPacketFragment();
mSelectedFragment = new SelectedFragment();
mSearchFragment = new SearchFragment();
mFm = getSupportFragmentManager();
switchFragment(mHomeFragment);
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
给底部的导航栏设置选中的监听
private void initListener() {
mNavigationView.setOnNavigationItemSelectedListener(item -> {
if(item.getItemId() == R.id.home) {
LogUtils.d(MainActivity.class,"切换到首页");
switchFragment(mHomeFragment);
} else if(item.getItemId() == R.id.selected) {
LogUtils.i(MainActivity.class,"切换到精选");
switchFragment(mSelectedFragment);
} else if(item.getItemId() == R.id.red_packet) {
LogUtils.w(MainActivity.class,"切换到特惠");
switchFragment(mRedPacketFragment);
} else if(item.getItemId() == R.id.search) {
LogUtils.e(MainActivity.class,"切换到搜索");
switchFragment(mSearchFragment);
}
return true;
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
选中以后要进行切换呀,对吧!
所以呢,就有了这个切换的方法
private void switchFragment(BaseFragment targetFragment) {
FragmentTransaction fragmentTransaction = mFm.beginTransaction();
fragmentTransaction.replace(R.id.main_page_container,targetFragment);
fragmentTransaction.commit();
}
1
2
3
4
5
2
3
4
5
至于使用hide还是replace我们后面会讲到。
同学们先完成这个导航栏切换上面的页面吧。
MainActivity.java的代码
package com.sunofbeaches.taobaounion.ui.activity;
import android.os.Bundle;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.sunofbeaches.taobaounion.R;
import com.sunofbeaches.taobaounion.base.BaseFragment;
import com.sunofbeaches.taobaounion.ui.fragment.HomeFragment;
import com.sunofbeaches.taobaounion.ui.fragment.RedPacketFragment;
import com.sunofbeaches.taobaounion.ui.fragment.SearchFragment;
import com.sunofbeaches.taobaounion.ui.fragment.SelectedFragment;
import com.sunofbeaches.taobaounion.utils.LogUtils;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.main_navigation_bar)
public BottomNavigationView mNavigationView;
private HomeFragment mHomeFragment;
private RedPacketFragment mRedPacketFragment;
private SelectedFragment mSelectedFragment;
private SearchFragment mSearchFragment;
private FragmentManager mFm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initFragments();
initListener();
}
private void initFragments() {
mHomeFragment = new HomeFragment();
mRedPacketFragment = new RedPacketFragment();
mSelectedFragment = new SelectedFragment();
mSearchFragment = new SearchFragment();
mFm = getSupportFragmentManager();
switchFragment(mHomeFragment);
}
private void initListener() {
mNavigationView.setOnNavigationItemSelectedListener(item -> {
if(item.getItemId() == R.id.home) {
LogUtils.d(MainActivity.class,"切换到首页");
switchFragment(mHomeFragment);
} else if(item.getItemId() == R.id.selected) {
LogUtils.i(MainActivity.class,"切换到精选");
switchFragment(mSelectedFragment);
} else if(item.getItemId() == R.id.red_packet) {
LogUtils.w(MainActivity.class,"切换到特惠");
switchFragment(mRedPacketFragment);
} else if(item.getItemId() == R.id.search) {
LogUtils.e(MainActivity.class,"切换到搜索");
switchFragment(mSearchFragment);
}
return true;
});
}
private void switchFragment(BaseFragment targetFragment) {
FragmentTransaction fragmentTransaction = mFm.beginTransaction();
fragmentTransaction.replace(R.id.main_page_container,targetFragment);
fragmentTransaction.commit();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
ok啦,就写到这里吧
上次更新: 2021/09/22, 18:06:43