fragment

一、生命周期

1、onAttach():当Fragment被添加到Activity中时被回调,该方法只被调用一次

2、onCreate(Bundle saveStatus): 创建Fragment时调用,该方法只被调用一次

3、onCreateView(): 每次创建,绘制该fragment的View组件时调用该方法,返回的View组件

4、onActivityCreate();所在的活动创建完成后调用该方法

5、onStart()启动Fragment时被调用

6、onResume():恢复fragment时调用

7、onPause():暂停时调用

8、onDestroyView():销毁fragment中的View时,该方法时调用

9、onDestroy():销毁frgment时调用

10、onDetach()frgment从活动中删除时调用

 

开发时根据需要有选择地实现一些方法,其中onCreateView()方法是最常见的方法。

 

二、其中fragment作为Activity的组成部分,Fragment可以调用getActivity()方法获取它所在的Activity。

在Activity中也可以通过FrgmentManager的findFragmentById()或者findFragmentByTag()方法来获取Fragment。

在Activity运行过程中,可以调用FrgmentManager获得FragmentTransaction对象,FragmentTransaction调用add(),remove(),replace()方法动态地添加,删除,替换Fragment。

一个Activity可以同时组合多个Fragment,同样一个Fragment也可以被多个Activity复用。

Fragment向Activity通信,还可在Fragment中定义一个回调接口,在Activity中实现该回调接口。

 

三、通常来说创建Fragment需要实现如下地三个方法

1、onCreate():系统创建Fragment对象时,回调该方法,可初始化fragment中保持必要地组件

2、onCreateView():当Fragment绘制界面组件时会调用方法,该方法必须返回一个view,该view就是Fragment所显示的View

3、onPause():当用户离开Fragment时将回调该方法

 

四、Fragment管理,Fragment事物

1、Activity管理Fragment主要通过FragmentManager。(在java中用getFragmentManager()方法获得FragmentManager),主要功能有如下:

1.1、findFragmentById()、findFragmentByTag()方法来获取Fragment。

1.2、popBackStack()方法从后台栈中将Fragment弹出

1.3、调用addOnBackStackChangeListener()注册一个监听器,监听后台栈的变化

 

2、如果想要实现添加,删除,替换Fragment,则需要借助Fragment事物(FragmentTransaction对象),想要Activity对Fragment的多个改变,其是通过FragmentTransaction(fragmentManager.beginTransaction()方法获得),最后用commit()方法提交事务。

 

五、Fragment可以有两种使用方法

1、直接在xml中间使用,当view使用

<fragment
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:name="com.example.asus.summary.LeftFragement"  //name为类名
    android:id="@+id/left"/>

2、可在java代码中使用

左右Fragment的动态交换(实例)

2.1、xml

<?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">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/change"
        android:text="change"
        android:layout_gravity="center"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/left_f"/>
        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:id="@+id/right_f"/>
    </LinearLayout>
</LinearLayout>

2.2left_fragment.xml

<?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.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/left_recyclerview"
        />
</LinearLayout>

2.3right_fragment.xml

<?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.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rigth_recyclerview"
        />
</LinearLayout>

2.4LeftFragment.java

public class LeftFragement extends Fragment {
    private List<Fruit> fruits=new ArrayList<>();
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
        init();
        View view=inflater.from(container.getContext()).inflate(R.layout.left_fragment,container,false);
       //加载出来的view为界面显示的View 

       //加载view里面的组件
        RecyclerView left=view.findViewById(R.id.left_recyclerview);
        LinearLayoutManager layoutManager=new LinearLayoutManager(container.getContext());
        left.setLayoutManager(layoutManager);
        FruitRecyclerViewAdapter adapter=new FruitRecyclerViewAdapter(fruits);
        left.setAdapter(adapter);

        return view;
    }
    private void init() {
        fruits.add(new Fruit("pingguo", R.drawable.apple));
        fruits.add(new Fruit("li", R.drawable.li));
        fruits.add(new Fruit("xiaojiao", R.drawable.blan));
        fruits.add(new Fruit("li", R.drawable.li));
        fruits.add(new Fruit("pingguo", R.drawable.apple));
        fruits.add(new Fruit("li", R.drawable.li));
        fruits.add(new Fruit("pingguo", R.drawable.apple));
        fruits.add(new Fruit("li", R.drawable.li));
        fruits.add(new Fruit("sz", R.drawable.sz));
        fruits.add(new Fruit("li", R.drawable.li));
    }
}

2.5RightFragment.java

public class RightFragment extends Fragment {
    private List<Fruit> fruits2=new ArrayList<>();
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
        init();
        View view=inflater.from(container.getContext()).inflate(R.layout.right_fragment,container,false);
​//加载出来的view为界面显示的View

      //加载view里面的组件
        RecyclerView right=view.findViewById(R.id.rigth_recyclerview);
        LinearLayoutManager layoutManager2=new LinearLayoutManager(container.getContext());
        right.setLayoutManager(layoutManager2);
        FruitRecyclerViewAdapter adapter2=new FruitRecyclerViewAdapter(fruits2);
        right.setAdapter(adapter2);

        return view;
    }
    private void init(){
        fruits2.add(new Fruit("li",R.drawable.li));
        fruits2.add(new Fruit("xiaojiao",R.drawable.blan));
        fruits2.add(new Fruit("pingguo",R.drawable.apple));
        fruits2.add(new Fruit("sz",R.drawable.sz));
        fruits2.add(new Fruit("li",R.drawable.li));
        fruits2.add(new Fruit("li",R.drawable.li));
        fruits2.add(new Fruit("li",R.drawable.li));
        fruits2.add(new Fruit("li",R.drawable.li));
    }
}

2.6实现Fruit.java和FruitRecyclerViewAdapter.java适配器

public class Fruit {
    private String name;
    private int imageId;

    public Fruit(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
}

 

public class FruitRecyclerViewAdapter extends RecyclerView.Adapter<FruitRecyclerViewAdapter.ViewHolder> {

    private List<Fruit> fruitList;
    private Context context;

    public FruitRecyclerViewAdapter(List<Fruit> fruitList) {
        this.fruitList = fruitList;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
    //将View组件和xml中的绑定
        ImageView fruitImage;
        TextView fruitName;
        public ViewHolder(View itemView) {
            super(itemView);
            fruitImage=itemView.findViewById(R.id.fruitImage);
            fruitName=itemView.findViewById(R.id.fruitName);
        }
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(parent!=null){
            context=parent.getContext();
        }
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
       //该view为每一个Fruit的View

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
     //将每一个viewHolder添加信息
        final Fruit fruit=fruitList.get(position);
        holder.fruitName.setText(fruit.getName());
        holder.fruitImage.setImageResource(fruit.getImageId());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,fruit.getName(),Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() {
   //返回个数
        return fruitList.size();
    }
}

2.7MainActivity.java

public class FragmentActivity extends AppCompatActivity implements View.OnClickListener{
    private int tage=0;
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.fragemnt_activity);

        Button change=findViewById(R.id.change);
        change.setOnClickListener(this);

        replace_left(new LeftFragement());
        replace_right(new RightFragment());
    }

    private  void replace_left(Fragment fragment){

      //获取Fragment管理FragmentManager
        FragmentManager fragmentManager=getSupportFragmentManager();

    //获取Fragment事物FragmentTransaction
        FragmentTransaction transaction=fragmentManager.beginTransaction();
    //FragmentTransaction调用替换
        transaction.replace(R.id.left_f, fragment);
//提交事务
        transaction.commit();
    }
   private  void replace_right(Fragment fragment){
        FragmentManager fragmentManager=getSupportFragmentManager();
        FragmentTransaction transaction=fragmentManager.beginTransaction();
        transaction.replace(R.id.right_f, fragment);
        transaction.commit();
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.change:{
                tage++;
                if(tage%2==0){
                    replace_left(new LeftFragement());
                   replace_right(new RightFragment());
                }else{
                   replace_left(new RightFragment());
                   replace_right(new LeftFragement());
                }
                break;
            }
            default:
                break;
        }
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值