更新与整理自己学的安卓相关知识
如有错误欢迎指证
第30章
Fragment简介
Fragment 是 Android 应用程式开发中的一个重要概念,它是一个独立的模组化区块,可以被嵌入到 Activity 中,也可以由多个 Fragment 组成一个 Activity。使用 Fragment 可以创造动态的使用者介面,并在应用程式运行时在 Activity 中增加或移除 Fragment。
每个 Fragment 由一个 XML 档案和一个对应的 Java class 组成。XML 档案定义了 Fragment 的使用者介面,而 Java class 则负责处理 Fragment 的逻辑。在 Android 应用程式中,Fragment 可以调用 Activity 的方法,也可以接收 Activity 传递过来的资料,因此可以实现 Activity 和 Fragment 之间的互动。
使用 Fragment 可以帮助开发者更好地组织应用程式的架构,使得程式更加模组化和易于维护。同时,Fragment 还可以提高应用程式的弹性和互动性,为使用者带来更好的体验。
在 Android 应用程式中增加一个 Fragment 到 Activity 中
可以使用 XML 档案来定义 Fragment 的使用者介面。首先,在 XML 档案中定义 Fragment 的外观和元素,然后在 Activity 中使用 FragmentManager 将 Fragment 加入到 Activity 中。
需要注意的是,如果使用的函式库有兼容较旧的 Android 版本,那么在 Activity 中使用 Fragment 时,必须继承 FragmentActivity 而不是 AppCompatActivity class。这是因为 FragmentActivity 是在较旧的 Android 版本中引入的,而 AppCompatActivity 是在后
来的版本中才出现的。
因此,在开发 Android 应用程式时,需要根据使用的函式库和目标 Android 版本来选择适当的 Activity 类别,以确保应用程式的正确运行。
import android.os.Bundle;import androidx.fragment.app.FragmentActivity; import android.view.Menu;public class MainActivity extends FragmentActivity { //继承FragmentActivity而不是AppCompatiActivity class..
单纯使用XML档无法在运行时动态的控制Fragment,所以必须使用程式码去控制。
处理Fragment events
Fragment可以被视为小型Activity,它拥有自己的布局、类别和生命週期。因此,Fragment中的小部件(View)也可以产生事件。要处理Fragment中的小部件产生的事件,需要根据事件处理器的宣告位置来决定,可以是Fragment本身,也可以是包含Fragment的Activity。
在应用程式中,Fragment可以与Activity和其他Fragment进行通信,并且可以在运行时动态添加或删除。因此,Fragment提供了更灵活和可重用的UI元素,可以增强应用程式的可维护性和可扩展性。
Fragment 间的通信
Fragment通常与Activity进行通信,而不是直接与其他Fragment进行通信。
情况一: 当Activity需要向Fragment进行通信时,可以通过Fragment的ID来引用Fragment对象,并使用该对象的方法来进行交互。
情况二: 当Fragment需要向Activity进行通信时,情况就会变得更複杂。Fragment需要定义一个Listener接口,并实现该接口的Activity类。然后,在Fragment中可以调用Listener接口的方法来与Activity进行交互。这种方法可以实现Fragment和Activity之间的鬆散耦合,从而提高应用程式的可维护性和可扩展性,请参考以下的例子:
下面的代码在ToolbarFragment类中定义了一个ToolbarListener接口,同时创建了一个名为activityCallback的变量,用于引用Activity。
//Fragment class中public class ToolbarFragment extends Fragment { ToolbarListener activityCallback; public interface ToolbarListener { public void onButtonClick(int position, String text); }..}
同时fragment class中的onAttach()方法也必须被複写以及实现,这个方法会被安卓系统自动使用当Fragment连同activity被初始化的时候,onAttach()会被传入一个activity的参照,该方法必须存取activity的参照同时验证ToolbarListener interface 是否被实现。参考以下的code:
//Fragment class中@Overridepublic void onAttach(Context context) { super.onAttach(context); try { activityCallback = (ToolbarListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement ToolbarListener"); }}
下一步是呼叫fragment中的回呼函数(callback method),以下例子是当按钮被按下时呼叫回呼函数
/*Fragment class中*/public void buttonClicked (View view) { activityCallback.onButtonClick(arg1, arg2);}
最后是修改Activity类去实现ToolbarListener接口:
//Activity class中public class MainActivity extends FragmentActivity implements ToolbarFragment.ToolbarListener { //onButtonClick被宣告在ToolbarListener里面 public void onButtonClick(String arg1, int arg2) { // Implement code for callback method }..}
Activity实现了ToolbarListener接口并且附加了ToolbarFragment时,ToolbarFragment可以通过activityCallback变量调用Activity的onButtonClick方法。这种方法可以实现Fragment和Activity之间的鬆散耦合,从而提高应用程式的可维护性和可扩展性。