Fragment初学3——使用Fragment的子类DialogFragment

简介: 承接上一节,本节说一下Fragment的子类,继承关系如下图Fragment有四个子类,就按顺序来吧,因为篇幅太长,我就一篇说一个DialogFragment,顾名思义,就是用Fragment方式实现Dialog的效果,使用DialogFragment至少需要实现onCreateView或者onCreateDialog方法。
承接上一节,本节说一下Fragment的子类,继承关系如下图


Fragment有四个子类 ,就按顺序来吧,因为篇幅太长,我就一篇说一个

DialogFragment,顾名思义,就是用Fragment方式实现Dialog的效果,使用DialogFragment至少需要实现onCreateView或者onCreateDialog方法。onCreateView即使用定义的 xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog创建出Dialog

1、 onCreateView实现DialogFragment

MyDialogFragment的布局如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/edit_name"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/editText_mydialog_fragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="116dp"
        android:layout_toRightOf="@+id/textView1"
        android:ems="10"
        android:imeOptions="actionDone"
        android:inputType="text" >
        <!-- imeOptions="actionDone"会将弹出的键盘上的enter按钮显示为完成(或Done) -->

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/editText_mydialog_fragment"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="28dp"
        android:text="名字"
        android:textSize="20sp" />

</RelativeLayout>

MyDialogFragment.java类

public class MyDialogFragment extends DialogFragment {

 private EditText mEditText;

 public MyDialogFragment() {

  // Empty constructor required for DialogFragment

 }

 @Override

 public View onCreateView(LayoutInflater inflater, ViewGroup container,

   Bundle savedInstanceState) {

  View view = inflater.inflate(R.layout.fragment_mydialog, container);

  mEditText = (EditText) view

    .findViewById(R.id.editText_mydialog_fragment);

  // getDialog().setTitle("Hello world");//设置标题

  getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题

  mEditText.requestFocus(); // EditText获得焦点

  getDialog().getWindow().setSoftInputMode(

    LayoutParams.SOFT_INPUT_STATE_VISIBLE); // 显示软键盘

  return view;

 }

}


DialogFragment的显示方法和普通Fragment还有点不一样, 一般自定义Fragment,用FragmentManager.beginTransaction得到一个Transaction,然后调用相应 Transaction的方法(show,replace,attach、add),然后Transaction.commit(),展示 Fragment。而上面的MyDialogFragment则是用从DialogFragment继承下来的show方法,通过参数传入FragmentManager和Tag来展示的,这里要注意一下。另外,默认情况下,回退键用来取消该dialog。


源码

相关文章
|
4月前
|
消息中间件 物联网 开发工具
【HarmonyOS 5】鸿蒙中如何使用MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级、基于发布 / 订阅(Publish/Subscribe)模式的即时通讯协议,专为资源受限的物联网(IoT)设备和低带宽、高延迟或不可靠网络环境设计。
245 0
|
11月前
|
监控 网络协议 安全
Tcpdump简直就是命令行抓包中的神!
【10月更文挑战第32天】
623 1
Tcpdump简直就是命令行抓包中的神!
|
存储 监控 JavaScript
我应该使用 Pinia 还是 Vuex?
我应该使用 Pinia 还是 Vuex?
|
算法 Java
3、Drools规则引擎-为什么选择Drools
Drools 是用 Java 语言编写的具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎 ,其基于CHARLES FORGY’S的RETE算法 符合业内标准,速度快且效率高。 业务分析师人员或审核人员可以利用它轻松查看业务规则, 检验已编码的规则执行了所需的业务规则。
546 0
|
网络协议 Linux 网络安全
无公网IP,SSH远程连接Linux CentOS服务器【内网穿透】
本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。
|
SQL Oracle 关系型数据库
数据库——查询所有表及其数据总条数
数据库——查询所有表及其数据总条数
|
编译器 Linux C语言
Linux-Conda环境安装指定版本GCC 编译phylocom-4.2 Debug记录
本文记录了在Linux上编译phylocom-4.2过程中处理一系列异常的 Debug过程,希望可以为在Conda环境中遇到类似GCC问题的小伙伴提供一些参考。
1485 0