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的结合是联动

  

posted @ 2021-08-14 02:06  remix_alone  阅读(62)  评论(0)    收藏  举报