Android类参考---Fragment(三)

本文详细介绍了Fragment类的功能和使用方法,包括其构造器、常用方法如dump、equals等,以及如何获取与Fragment关联的Activity、资源等。同时,还介绍了如何通过FragmentManager管理Fragment,以及如何实例化Fragment。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类说明

1. 嵌套类

class Fragment.InstantiationException

当有一个实例化错误时,会通过instantiate(Context, String, Bundle)方法抛出这个异常类。

class Fragment.SavedState

通过FragmentManager.saveFragmentInstanceState(Fragment)方法从一个Fragment对象实例中获取要保存的状态信息。

2.  继承的常量

来自接口:android.content.ComponentCallbacks2

3.  Public构造器和方法

public Fragment()

默认构造器。每个Fragment类都必须有一个空的构造器,以便在恢复Activity状态时能够用它能够来实例化Fragment对象。强烈的推荐Fragment的任何子类不要有带有参数的其他构造器,因为这些构造器在Fragment被重新实例化时不会被调用,相反,能够通过调用setArguments(Bundle)方法把参数提供给调用者,并且随后可以通过Fragment的getArguments()方法来获取。

通常,应用程序不应该实现这个构造器。在该Fragment对象首次准备运行的地方,使用onAttach(Activity)方法,将Fragment对象跟Activity对象关联到一起。某些应用程序还可能想要实现onInflate(Activity, AttributeSet, Bundle)方法,来从布局资源中获取属性,但是因为Fragment对象被绑定到Activity上,就应该小心的使用这种方法。

public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args)

该方法把Fragment对象的状态打印到给定的二进制流中。

参数:

prefix:在每行前面要打印的文本。

fd:转存信息要被发送给的原始文件描述符。

writer:指定接收转存状态的PrintWriter对象,该方法返回后,这个PrintWriter对象会被关闭。

args:指定转存请求的附加参数。

public final boolean equals(Object o)

子类不同覆写这个方法。

参数:

o:指定要跟本实例比较的对象。

返回值:

true:指定的对象跟本对象相等,false:不相等。

public final Activity getActivity()

返回跟该Fragment对象关联的Activity对象。

public final Bundle getArguments()

返回该Fragment对象被实例化时所提供的参数。

public final FragmentManager getFragmentManager()

返回跟该Fragment的Activity关联的所有的Fragment对象的管理器---FragmentManager对象。要注意的是在Fragment对象被放置到FragmentTransaction对象中,直到被提交给与它绑定的Activity期间,该方法一直返回null值。

public final int getId()

该方法返回该Fragment对象的标识,这个标识既可以是在布局中提供的android:id属性值,也可以是在添加Fragment对象时提供的容器View ID。

public LoaderManager getLoaderManager()

返回针对该Fragment对象的LoaderManager对象,如果需要就创建它。

public final Resources getResources()

该方法返回跟Fragment对象关联的资源。

public final boolean getRetainInstance()

 

public final String getString(int resId)

从应用程序包的默认字符串表中返回一个本地化的字符串。

参数:

resId 要获取的字符串的资源ID。

public final String getString(int resId, Object… formatArgs)

从应用程序包的默认字符串表中返回一个被本地化的格式化字符串,用Formatter对象中format(String, Object…)方法来替换格式化的参数。

参数:

resId  指定格式化字符串的资源id

formatArgs  指定要替换的格式化参数

public final String getTag()

如果Fragment对象被指定了名称,那么使用该方法来获取Fragment对象的名称。

public final Fragment getTargetFragment()

返回由setTargetFragment(Fragment, int)方法所设置的目标Fragment对象。

public final int getTargetRequestCode()

返回由setTargetFragment(Fragment, int)方法所设置的目标请求编码。

public final CharSequence getText(int resId)

从应用程序包的默认字符串表中返回指定的本地化的、样式化的CharSequence对象。

参数:

resId  指定要获取的CharSequence对象文本的资源id。

public final getUserVisibleHint()

返回要该Fragment对象上显示给用户的提示信息的值。

Public View getView()

获取该Fragment对象布局的根View对象,如果没有布局,则返回null。

public final int hashCode()

子类不能覆盖重写该方法。返回对象的hash code。

public static Fragment instantiate(Context context, String fname)

除了没有Bundle参数以外,其他的跟instantiate(Context, String, Bundle)方法一样。

public static Fragment instantiate(Context context, String fname, Bundle args)

用给定的类名创建一个新的Fragment对象实例。它跟调用空的构造器一样。

参数:

context 实例化该Fragment对象时要使用的上下文环境。当前只用于获取它的类装载器---ClassLoader对象。

fname 要实例化的Fragment类的名称。

args 指定要提供给Fragment对象的Bundle参数,可以使用getArguments()方法获取其中的参数。也可以是 null。

返回一个新的Fragment对象实例。

异常(Throws)

InstantiationException  如果在实例化给定的Fragment类时发生错误,就会抛出这个运行时异常,它通常是不被期望发生的。

 

<think>嗯,用户想了解Android Studio中Fragment对象的使用方法或相关问题。首先,我需要回忆一下关于Fragment的基础知识。记得FragmentAndroid应用中的一部分,有独立的生命周期,但必须依附于Activity存在。用户可能需要知道如何创建Fragment,如何与Activity交互,以及可能遇到的常见问题,比如getActivity()返回null的情况。 根据引用内容,Fragment可以通过xml布局或者动态添加。动态添加更灵活,所以可能需要详细说明FragmentManagerFragmentTransaction的使用。例如,使用add()、replace()方法,还有添加到回退栈的操作,这样用户可以使用返回键回到之前的Fragment。引用[5]提到了回退栈的相关方法,比如getBackStackEntryAt,这部分应该包含在回答中。 另外,传递参数到Fragment也是一个重点。用户可能需要在创建Fragment时通过Bundle传递数据,或者在Fragment中通过接口与Activity通信。引用[1]提到了向Fragment传递参数的代码示例,应该引用这个部分。 关于生命周期,Fragment有自己的生命周期,比如onAttach、onCreateView等,需要解释这些方法的作用。同时,用户可能遇到getActivity()null的情况,这可能是在Fragment被销毁后还尝试访问Activity导致的,需要提醒在onDetach时处理这种情况。 还有导航的问题,引用[4]提到了使用Navigation组件进行导航,比如findNavController().navigate(),这也是一个有用的点,可以建议用户使用Android Jetpack的Navigation组件来简化Fragment之间的跳转。 最后,常见问题部分需要涵盖动态添加、参数传递、回退栈管理以及getActivity()null的情况。引用[5]关于回退栈的内容和引用[1]中提到的生命周期问题都需要整合进来。 现在要确保回答结构清晰,分点说明,每个部分有示例代码,并正确引用提供的参考资料。同时,生成的相关问题需要围绕用户可能进一步想知道的内容,比如性能优化、生命周期管理、回退栈使用和参数传递方法。</think># Android Studio中Fragment对象使用方法详解 ### 一、Fragment基本使用 1. **创建Fragment** - 新建继承自`Fragment`的,重写`onCreateView()`方法: ```java public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_layout, container, false); } } ``` 2. **XML静态添加** 在Activity布局中使用`<fragment>`标签: ```xml <fragment android:id="@+id/my_fragment" android:name="com.example.MyFragment" <!-- 引用[2] --> android:layout_width="match_parent" android:layout_height="wrap_content"/> ``` 3. **动态添加** 使用`FragmentManager`和`FragmentTransaction`: ```java FragmentManager fm = getSupportFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); transaction.add(R.id.container, new MyFragment()); transaction.addToBackStack(null); // 引用[5] transaction.commit(); ``` ### 二、Fragment生命周期关键点 - `onAttach()`:与Activity关联时调用 - `onCreateView()`:创建视图时调用 - `onDestroyView()`:视图销毁时调用 - `onDetach()`:与Activity解绑时调用 (生命周期管理可参考引用[1]中描述的Fragment与Activity关系) ### 、数据传递方法 1. **通过Bundle传递参数** ```java Bundle args = new Bundle(); args.putString("key", "value"); MyFragment fragment = new MyFragment(); fragment.setArguments(args); ``` 2. **Activity与Fragment通信** - Activity获取Fragment:`findFragmentById()`或`findFragmentByTag()`(引用[1]) - Fragment获取Activity:`getActivity()` ### 四、导航与回退栈 1. **使用Navigation组件** ```kotlin findNavController().navigate(R.id.action_to_next) // 引用[4] ``` 2. **回退栈操作** ```java getSupportFragmentManager().popBackStack(); // 引用[5] ``` ### 五、常见问题解决 1. **`getActivity()`返回null** 在`onDetach()`中置空Activity引用,避免在Fragment销毁后调用 2. **状态恢复问题** 使用`onSaveInstanceState()`保存数据
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值