gpt4 book ai didi

Android fragment 和 Activity 问题

转载 作者:行者123 更新时间:2023-11-30 03:30:50 25 4
gpt4 key购买 nike

这是对上一个问题的扩展,但问题更多,代码更少 (Android starting another activity or calling a method from another class (using fragments))。在编写结合位置 API 代码的抽屉导航示例应用程序时,我试图更好地了解 fragment 和 Activity 在 Android 应用程序中的工作方式。

据我了解,必须创建抽屉导航以扩展 Activity,以便正确执行 UI 组件。到目前为止,我所做的是将我的 UI Pane 分解为不同的 fragment ,每个 fragment 具有不同的 XML 和 Java 文件。 Java 文件从其中指定的 XML 构建 UI,并在内容 Pane 中显示内容,同时保持抽屉导航完好无损,类似于:http://manishkpr.webheavens.com/android-navigation-drawer-example-using-fragments/ .

这些 fragment 中的每一个,除了“Home”之外,都需要来自 Location APIs/Location Activity 的代码,它基于这个 MainActivity:https://developer.android.com/training/location/retrieve-current.html .但是我有两个问题:

  1. 我的 Location Activity 类具有代码 onCreate 以从 UI 填充 TextView 变量。但是 UI 全部由 fragment 处理。因此,每次创建 Location Activity 时,这些变量都为空,因为 Activity 似乎不与 fragment UI 通信。

  2. fragment 中的按钮调用仅存在于 Location Activity 中的方法。而且它们似乎不与 Activity 通信,仅与它们的 fragment Java 类通信。

那么首先,这听起来像是正确的方法吗?使用 fragment 处理抽屉导航中的选项并在内容 Pane 中生成内容?如果是这样,我如何让它与位置 Activity 一起使用?

最佳答案

我在很多方面都遇到过你在这里所说的,我认为这里没有对错..主要是因为有时候工作不会让你自由地做你想做的事。

  1. 回答:是的,你是对的,你这里有某种“鸡蛋和鸡肉”的情况,那么,如何解决它:

一个。让我们假设您不希望用户在完成 fragment 膨胀之前做任何事情,所以第一个 Action 将是 (ui/ux) 显示进度对话框。

仅出于纵容考虑,假设您正在或已经将 fragment 添加到某种布局中(可以说是相对布局)..此布局可以扩展到您自己的类(class),请参阅: http://developer.android.com/training/custom-views/create-view.html

现在,在您的特殊类(class)中,您可以使用两者之一(取决于您想要进入的时刻)任何一个 - @覆盖 protected void onFinishInflate() { super.onFinishInflate(); }或者 - @覆盖 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }(请记住,onMeasure 有可能被多次调用,而不仅仅是在开始时。)

因此,我们有一个正在扩展的 View ,我们可以在 Activity 的 onCreate 上对其进行 grep 甚至在它被创建和膨胀之前。在这个扩展 View 中,我将添加一个公共(public)函数,如:

public void setOnFinishInflatingTheChikenOrTheEggListener(IonFinished 监听器) ...

IonFinished 将是一个带有简单功能的简单界面,只是告诉您 View 已完成在屏幕上膨胀。

现在让您的 Activity 实现 IonFinished,并将其作为参数传递给 setOnFinishInflatingTheChikenOrTheEggListener 函数,将其保存在那里,当调用我们之前覆盖的函数之一时,您可以触发此监听器。

此功能已在您的 Activity 中触发,在这里可以安全地获取您的 fragment ,并与他一起做某事..因为您确定所有 View 都已到位...(此时不要忘记关闭对话框)。

(如果你不明白,告诉我,我给你举个例子......)

2。回答:让我们继续第二个问题,这比以前容易得多,在你的 fragment 中你有按钮,你为他们设置了一个 onClickListner ...在其中你应该使用以下内容:

Activity activity =  getActivity();
if(activity!=null && activity instanceof LocationActivity ){
LocationActivity myLocationActivity = (LocationActivity)activity;
//****************************************************************
// call here to any public function in your activity, get set listeners, basically do anything..
}

希望它有助于了解更多关于 fragment ...

关于Android fragment 和 Activity 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17507939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com