碎片的使用一

在开发中,我们经常要用到碎片,碎片与活动特别像,但却不是。在我们平常看到的平板与手机之间的app会清晰地发现两者的不同点,在于手机只有一个活动窗口,而平板除了一个活动窗口外它有可能还增加了一个以上的详细信息。

接下来,我们就先学习如何简单地使用Fragment。

一、我们可以创建一个碎片布局。命名为fragment_easy。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/left_button"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/left_button"/>

</LinearLayout>

二、我们在创建一个继承support-v4的Fragment的类名为EasyFragment的类,覆盖其oncreateview方法。

public class EasyFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_easy, container, false);
    }
}

三、在activity布局中添加fragment标签,name值为我们要添加的fragment类。

<fragment
        android:id="@+id/left_fragment"
        android:name="com.zlq.fragmentlibrary.EasyFragment"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"/>

我们现在已经了解了fragment的简单使用,现在我们就可以动态的切换fragment。

一、我们再次向之前一样新建一个fragment。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#9e091eff"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:textSize="20sp"
        android:text="@string/this_is_another_right_fragment"/>

</LinearLayout>
public class AnotherEasyRightFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.another_right_fragment_easy, container, false);
    }
}

二、把activity的布局中的fragment换成FrameLayout,然后用控件切换。

public class EasyFragment extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_easy_fragment);
        replaceFragment(new RightEasyFragment());
        ((Button) findViewById(R.id.left_button)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                replaceFragment(new AnotherEasyRightFragment());
            }
        });

    }

    private <T extends android.support.v4.app.Fragment> void  replaceFragment(T fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.right_layout,fragment);
        fragmentTransaction.commit();
    }
}

在碎片中,我们注册了一个按钮,通过按钮切换fragment。

主要步骤:

1、创建待添加的碎片实例。

2、获取FragmentManager,活动中可以直接通过调用getSupportFragmentManager()方法得到。

3、开启一个事务,通过调用beginTransaction()方法开启。

4、向窗口内添加或替换碎片,一般使用replace()方法实现,需要传入窗口的id和待添加的碎片实例。

5、提交事务,调用commit()方法完成。


碎片中如何像activity一样返回至上一个fragment。

fragmentTransaction.addToBackStack(null);

碎片与活动间的通信。

获取对应的实例:

RightFragment rightFragment = (RightFragment)getSupportFragmentManager().findFragmentById(R.id.right_fragment);
获取对应的activity实例:
MainActivity activity =(MainActivity)getActivity();从中获取context。

碎片间通信。

碎片间的通信,是需要通过中间的活动,所以,一个碎片获取该实例,然后通过这个实例获取另一个碎片。

猜你喜欢

转载自blog.csdn.net/qq_33505655/article/details/80304996