Android——Fragment
介绍
Fragment:有生命周期的组件
作用:
1. 全屏页面高效率切换(ViewPaper + Fragment)
2. 组件带有生命周期(平板新闻界面)
属性
android:name="xxxx"
显式指定类名,将类fragment加载到标签中
方法
View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
参数:
LayoutInflater inflater :布局填充器
ViewGroup container:组件容器
Bundle savedInstanceState :不太清楚
返回值:View
返回值意义:fragment获取视图
作用:是Fragment获取视图方法。
使用
public class HomeFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_home,container,false); } }
使用 ViewPager + FragmentPagerAdapter + Fragment + RadioGroup 创建页面
ViewPager
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch ( position ){ case 0: rb_home.setChecked(true); break; case 1: rb_goods.setChecked(true); break; case 2: rb_mine.setChecked(true); break; } } @Override public void onPageScrollStateChanged(int state) { } });
FragmentPaperAdapter
public class MyFragmentAdapter extends FragmentPagerAdapter { public MyFragmentAdapter(@NonNull FragmentManager fm) { super(fm); } @NonNull @Override public Fragment getItem(int position) { switch ( position ){ case 0: return new HomeFragment(); case 1: return new GoodsFragment(); case 2: return new MineFragment(); } return null; } @Override public int getCount() { return 3; } }
综合使用
布局
<LinearLayout 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:layout_height="match_parent" tools:context=".MainActivity2" android:orientation="vertical"> <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/vp"/> <RadioGroup android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/rg" android:layout_gravity="bottom" android:orientation="horizontal"> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:button="@null" android:text="首页" android:id="@+id/rb_home" android:layout_weight="1"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:button="@null" android:text="商品" android:id="@+id/rb_goods" android:layout_weight="1"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:button="@null" android:text="我的" android:id="@+id/rb_mine" android:layout_weight="1"/> </RadioGroup> </LinearLayout>
代码
public class MainActivity2 extends AppCompatActivity {
@BindView(R.id.rg)
public RadioGroup rg;
@BindView(R.id.rb_home)
public RadioButton rb_home;
@BindView(R.id.rb_goods)
public RadioButton rb_goods;
@BindView(R.id.rb_mine)
public RadioButton rb_mine;
@BindView(R.id.vp)
public ViewPager viewPager;
public MyFragmentAdapter myFragmentAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ButterKnife.bind(this);
myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager());
viewPager.setAdapter(myFragmentAdapter);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch ( position ){
case 0:
rb_home.setChecked(true);
break;
case 1:
rb_goods.setChecked(true);
break;
case 2:
rb_mine.setChecked(true);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_home:
viewPager.setCurrentItem(0);
break;
case R.id.rb_goods:
viewPager.setCurrentItem(1);
break;
case R.id.rb_mine:
viewPager.setCurrentItem(2);
break;
}
changeTextColor(checkedId);
}
});
}
public void changeTextColor(int rbId){
int ids [] = new int[] {R.id.rb_home,R.id.rb_goods,R.id.rb_mine};
for( int id : ids ){
if( id == rbId){
RadioButton rb = this.findViewById(rbId);
rb.setTextColor(Color.parseColor("#f4ea2a"));
}else {
RadioButton rb = this.findViewById(id);
rb.setTextColor(Color.parseColor("#161616"));
}
}
}
}
1. 创建Fragment布局文件
2. 创建class文件继承Fragment,重写onCreateView(),让Fragment获取视图
3. 主布局文件中使用<fragment>标签,添加android:name="全类名" ,即可使用
//-----------------------------------------------------------
使用Fragment+FragmentPaperAdapter+ViewPaper 作底部导航栏
1.新建Fragment视图文件和Class文件。
2.在主视图中定义ViewPaper标签
3.编写适配器,FragmentPaperAdapter重写getView() 返回不同position的Fragment 。
4.主活动中 Viewpaper.setAdapter( FragmentPaperAdapter fragmentPaperAdapter )即可。
ps:与RadioButton的结合是联动

浙公网安备 33010602011771号