Android Studio Fragment(day12)

本文围绕Android的Fragment展开,介绍其特点,即用于页面模块化管理,一个Activity中可有多个且不能单独使用。还阐述了显示方式,包括静态和动态显示。说明了创建Fragment的方法,以及Fragment间传值的方式如EventBus,并给出了相关代码片段。

特点

碎片用来将页面模块化管理,一个Activity中可以有多个碎片,碎片不可以单独使用

显示方式

1 静态显示
2 动态显示

如何创建Fragment

1 自定义类继承Fragment
2 重写onCreateView(为占位填充布局)

Fragment - Fragment 传值

1.EvectBus
步骤
Fragment 1 发送EventBus.getDefault().postSticky();
Fragment 2 注册,解绑,接受
@SubScrib(threadMode = ThreadMode.Main,sticky = true)
接受方法

代码片段

布局文件
定义数个占位布局 之后往里面添加布局文件

<FrameLayout
        android:layout_above="@id/bottom"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout
            android:id="@+id/fragment_a"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></FrameLayout>
        <FrameLayout
            android:id="@+id/fragment_b"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></FrameLayout>
        <FrameLayout
            android:id="@+id/fragment_c"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></FrameLayout>
        <FrameLayout
            android:id="@+id/fragment_d"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></FrameLayout>
    </FrameLayout>

自定义类继承Fragment

public class FragmentC extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_c, container, false);
        return view;
    }
}

主类Oncreate

		fragmentA = new FragmentA();
        fragmentB = new FragmentB();
        fragmentC = new FragmentC();
        fragmentD = new FragmentD();

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.fragment_a,fragmentA);
        transaction.add(R.id.fragment_b,fragmentB);
        transaction.add(R.id.fragment_c,fragmentC);
        transaction.add(R.id.fragment_d,fragmentD);
        transaction.commit();
        
		btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getSupportFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();
                transaction.show(fragmentA);
                transaction.hide(fragmentB);
                transaction.hide(fragmentC);
                transaction.hide(fragmentD);
                transaction.commit();
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getSupportFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();
                transaction.show(fragmentB);
                transaction.hide(fragmentA);
                transaction.hide(fragmentC);
                transaction.hide(fragmentD);
                transaction.commit();
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getSupportFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();
                transaction.show(fragmentC);
                transaction.hide(fragmentA);
                transaction.hide(fragmentB);
                transaction.hide(fragmentD);
                transaction.commit();
            }
        });

        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getSupportFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();
                transaction.show(fragmentD);
                transaction.hide(fragmentA);
                transaction.hide(fragmentB);
                transaction.hide(fragmentC);
                transaction.commit();
            }
        });
<think>我们正在回答用户关于DatePickerDialog的使用问题。用户希望得到示例代码或指南。根据用户提供的引用,引用[2]提到了DatePickerDialog是系统定义好的对话框之一。虽然引用中没有直接给出DatePickerDialog的代码示例,但我们可以结合Android开发知识来提供帮助。另外,引用[1]是关于MultiSelectDatePicker的布局,引用[3]是关于Fragment生命周期,引用[4]是关于ViewPager的适配器,这些与DatePickerDialog关系不大,但我们仍要专注于用户当前的问题。用户的问题是:如何在AndroidStudio中使用DatePickerDialog的示例或指南。因此,我们将提供DatePickerDialog的基本使用步骤和示例代码。步骤:1.创建一个按钮或其他控件来触发DatePickerDialog。2.使用DatePickerDialog的构造函数创建对话框实例,其中需要传入上下文、监听器、初始年、月、日。3.实现DatePickerDialog.OnDateSetListener接口,以处理用户选择日期后的操作。4.显示对话框。示例代码:以下是一个简单的Activity示例,其中包含一个按钮,点击按钮弹出DatePickerDialog,并在选择日期后在一个TextView上显示选择的日期。```javaimportandroid.app.DatePickerDialog;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.DatePicker;importandroid.widget.TextView;importandroidx.appcompat.app.AppCompatActivity;importjava.util.Calendar;publicclassMainActivityextendsAppCompatActivityimplementsDatePickerDialog.OnDateSetListener{privateTextViewselectedDateTextView;privateButtonopenDialogButton;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);selectedDateTextView=findViewById(R.id.selected_date_textview);openDialogButton=findViewById(R.id.open_dialog_button);openDialogButton.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){//获取当前日期Calendarcalendar=Calendar.getInstance();intyear=calendar.get(Calendar.YEAR);intmonth=calendar.get(Calendar.MONTH);intday=calendar.get(Calendar.DAY_OF_MONTH);//创建DatePickerDialog实例并显示DatePickerDialogdatePickerDialog=newDatePickerDialog(MainActivity.this,MainActivity.this,year,month,day);datePickerDialog.show();}});}//实现OnDateSetListener接口的方法@OverridepublicvoidonDateSet(DatePickerview,intyear,intmonth,intdayOfMonth){//注意:month是从0开始的,所以实际月份要加1Stringdate="选择的日期:"+year+"-"+(month+1)+"-"+dayOfMonth;selectedDateTextView.setText(date);}}```布局文件(activity_main.xml)示例:```xml<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><Buttonandroid:id="@+id/open_dialog_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="选择日期"/><TextViewandroid:id="@+id/selected_date_textview"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="尚未选择日期"android:textSize="16sp"android:paddingTop="16dp"/></LinearLayout>```说明:-在Activity中实现了DatePickerDialog.OnDateSetListener接口,这样我们就可以在onDateSet方法中处理日期选择结果。-当用户点击按钮时,我们创建一个DatePickerDialog并显示,初始日期设置为当前日期。-在onDateSet回调中,我们将选择的日期显示在TextView上。注意,month是从0开始的,所以我们在显示时加1。注意事项:-如果使用Fragment,则需要使用FragmentManager,并且推荐使用`DatePickerDialog`的另一个构造函数,该构造函数支持使用`Fragment`,这样日期选择对话框可以正确管理其生命周期。但基本用法类似。相关问题:根据用户的问题,我们生成以下相关问题:1.如何在Fragment中使用DatePickerDialog?2.如何设置DatePickerDialog的最小日期和最大日期?3.如何自定义DatePickerDialog的样式?4.DatePickerDialog和DatePicker有什么区别?用户可以选择继续深入探讨这些问题。</think> ### Android Studio中使用DatePickerDialog的完整指南 DatePickerDialog是Android系统提供的内置日期选择组件,使用前需确保在`build.gradle`中已添加基础依赖: ```gradle dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' } ``` #### 基础使用步骤(Activity中) 1. **创建触发按钮** ```xml <!-- res/layout/activity_main.xml --> <Button android:id="@+id/btn_open_picker" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="选择日期"/> ``` 2. **实现日期选择逻辑** ```java public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener { // 实现接口 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_open_picker).setOnClickListener(v -> { // 获取当前日期 final Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); // 创建并显示对话框 DatePickerDialog dialog = new DatePickerDialog( this, this, // 监听器 year, month, day ); dialog.show(); }); } // 日期选择回调 @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { // 注意:month从0开始(0=1月,11=12月) String date = String.format(Locale.getDefault(), "%d-%02d-%02d", year, month+1, dayOfMonth); Toast.makeText(this, "选中日期:" + date, Toast.LENGTH_SHORT).show(); } } ``` #### 在Fragment中使用 ```java public class MyFragment extends Fragment implements DatePickerDialog.OnDateSetListener { @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { view.findViewById(R.id.btn_picker).setOnClickListener(v -> { Calendar c = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog( requireContext(), this, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH) ); dialog.show(); }); } @Override public void onDateSet(DatePicker view, int year, int month, int day) { // 处理日期 } } ``` #### 高级功能示例 1. **日期范围限制** ```java DatePickerDialog dialog = new DatePickerDialog(...); dialog.getDatePicker().setMinDate(System.currentTimeMillis()); // 禁止选择过去日期 // dialog.getDatePicker().setMaxDate(...); // 设置最大日期 ``` 2. **自定义对话框样式** ```java DatePickerDialog dialog = new DatePickerDialog( this, R.style.MyDatePickerStyle, // 自定义样式 this, year, month, day ); ``` 3. **设置标题和按钮文字** ```java dialog.setTitle("选择预约日期"); dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确认", dialog); dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", dialog); ``` ### 关键注意事项 1. **日期偏移问题**:`month`参数从0开始(0=1月),显示时需+1 2. **主题适配**:在`themes.xml`中创建自定义样式解决旧版本兼容问题 3. **设备时区**:`Calendar.getInstance()`返回设备当前时区的日期 4. **生命周期**:在Fragment中使用时,对话框自动随Fragment销毁重建[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值