03.06-Fragment知识点

03.06-Fragment知识点

1.什么是Fragment?

    Fragment是Android3.0(API level 11)开始引入的新技术。为了提高代码的重用性和改善用户体验,我们将Activity中的UI组件进行分组和模块化管理。这些分组后的UI组件就是Fragment。

2.用Fragment可以解决哪些问题?

    使用Fragment可以在Activity中实现页面的灵活切换;解决页面局部布局问题,通过Fragment设计的布局可以可以灵活的解决不同屏幕分辨率的适配问题,提高程序员的工作效率。

3.Fragment静态加载方法:

    .建立一个Activity和一个Fragment文件;
    .根据具体要求对Fragment.xml进行布局;
    .通过标签将Fragment页面放入activity.aml里来。
 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >
    <fragment
        android:id="@+id/fragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:name="com.example.lenovo.myapplication.TestkFragment"
        />

        <fragment
        android:id="@+id/fragment1"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:name="com.example.lenovo.myapplication.Fragment.Fragment_test1"
        />
    LinearLayout>
    .静态加载注意点:设置标签时注意加上id和name。

4.Fragment动态加载方法:

    .建立一个Activity和两或多个Fragment文件;
    .对Activity.xml文件进行布局。将其分为两部分,固定区域和Fragment滑动区域;

代码如下:
固定区域,如按钮之类的。

 <LinearLayout
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <Button
            android:id="@+id/man_btn"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:text="man"
            android:textSize="20sp"
            />
        <Button
            android:id="@+id/woman_btn"
            android:layout_width="100dp"
            android:layout_height="80dp"
            android:text="woman"
            android:textSize="20sp"
            />
    LinearLayout>
    Fragment滑动区域
    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    FrameLayout>
    .在Activity.java中定义Button和Fragment
    ---绑定ID---添加监听---添加点击事件---
    .用FragmentManger、FagmentTransaction方法管理Fragment

代码如下:


public class TianmallActivity extends AppCompatActivity implements View.OnClickListener {

    private Button manbtn;
    private Button womanbtn;
    private manFragment manfragment;
    private womanFragment womanfragment;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tianmall);

        bindID();
    }

    private void bindID() {
        manbtn = findViewById(R.id.man_btn);
        womanbtn = findViewById(R.id.woman_btn);
        //设置监听
        manbtn.setOnClickListener(this);
        womanbtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        FragmentManager manager = getFragmentManager();//创建FragmentManger对象
        FragmentTransaction transaction = manager.beginTransaction();//创建FragmentTransaction对象
        switch (view.getId()) {
            case R.id.man_btn:
                if (manfragment == null) {
                    manfragment = new manFragment();
                }
                transaction.replace(R.id.content, manfragment);
                break;
            case R.id.woman_btn:
                if (womanfragment == null) {
                    womanfragment = new womanFragment();
                }
                transaction.replace(R.id.content, womanfragment);
                break;
            default:
                break;
        }
        transaction.commit();//最后一步一定要提交
    }
}
    .动态加载注意点:使用FragmentTransaction方法最后一定要提交:transaction.commit();

5.使用ViewPager和Fragment结合

    .建立一个Activity、两个或以上Fragment文件和一个Adapter适配器;
    .在Activity.xml文件中使用ViewPager进行页卡切换

代码如下:


    .support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/menu">

    .support.v4.view.ViewPager>
    .注意点:一定要写id和name 
    .配置FragmentAdapter适配器

代码如下:

public class WxAdapter extends FragmentPagerAdapter {
    private List mFragmentlist;
    public WxAdapter(FragmentManager fm,List fragmentList) {
        super(fm);
        this.mFragmentlist=fragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentlist.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentlist.size();
    }
}
    .Activity.java活动页面代码

代码如下:

public class WxActivity extends AppCompatActivity implements View.OnClickListener {

    private Button newsBtn;
    private Button contactBtn;
    private Button friendBtn;


    private ContactFragment contactFragment;
    private FriendFragment friendFragment;
    private NewsFragment newsFragment;

    private ViewPager viewPager;

    private List fragmentList=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wx);

        bindId();

        newsFragment=new NewsFragment();
        contactFragment=new ContactFragment();
        friendFragment=new FriendFragment();

        fragmentList.add(newsFragment);
        fragmentList.add(contactFragment);
        fragmentList.add(friendFragment);

        //创建适配器
        WxAdapter adapter=new WxAdapter(getSupportFragmentManager(),fragmentList);
        //绑定适配器
        viewPager.setAdapter(adapter);
    }

    private void bindId() {
        newsBtn = findViewById(R.id.News_btn);
        contactBtn = findViewById(R.id.Contact_btn);
        friendBtn = findViewById(R.id.Friend_btn);
        viewPager = findViewById(R.id.vp);

        newsBtn.setOnClickListener(this);
        contactBtn.setOnClickListener(this);
        friendBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.News_btn:
                viewPager.setCurrentItem(0);
                break;
            case R.id.Contact_btn:
                viewPager.setCurrentItem(1);
                break;
            case R.id.Friend_btn:
                viewPager.setCurrentItem(2);
                break;
        }
    }
}

注意:Fragment和Fragment方法一定要引入相同的包。

你可能感兴趣的:(03.06-Fragment知识点)