Fragment 碎片

活动是一个可以嵌入活动中的UI片段,在大屏幕上应用广泛.

动态添加碎片

容器布局:

<?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="horizontal">
    <!--碎片布局-->
    <fragment
        android:id="@+id/left_fragment"
        android:name="com.win.fragmentdemo.LeftFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
    <!--动态添加碎片的容器,帧布局-->
    <FrameLayout
        android:id="@+id/right_layout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />
</LinearLayout>

Fragment 文件:

public class LeftFragment extends Fragment {
    
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
    
    	//通过LayoutInflater的inflate()方法将碎片布局动态加载进来
        View view = inflater.inflate(R.layout.left_fragment,container,false);
        return view;
    }
}

向LinearLayout容器中添加内容,从而实现动态添加碎片的功能

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.btn_fragment);
        button.setOnClickListener(this);//给按钮注册一个点击事件
        replaceFragment(new RightFragment());//动态添加右侧碎片
    }

    @Override
    public void onClick(View view) {
    
    
        switch (view.getId()) {
    
    
            case R.id.btn_fragment:
                replaceFragment(new RightFragment001());//动态添加另一个碎片
                break;
            default:
                break;
        }
    }

    //动态添加碎片
    private void replaceFragment(Fragment fragment) {
    
    
        FragmentManager manager = getSupportFragmentManager();//创建FragmentManager
        FragmentTransaction transaction = manager.beginTransaction();//开启事务
        transaction.replace(R.id.right_layout, fragment);//入参是容器id和待添加的碎片实例
        transaction.addToBackStack(null);//将事务添加到返回栈中(back键返回上一个碎片),入参是一个名字用于描述返回栈状态,一般用null就行
        transaction.commit();//提交事务
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_55806809/article/details/121329138