1

这是对上一个问题的一种扩展,但问题更多,代码更少(Android 开始另一个活动或从另一个类调用方法(使用片段))。我试图更好地了解片段和活动如何在 Android 应用程序中工作,同时编写一个与位置 API 代码相结合的导航抽屉示例应用程序。

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

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

  1. 我的位置活动类有代码 onCreate 从 UI 填充 TextView 变量。但是 UI 都是由 Fragment 处理的。所以每次创建位置活动时,这些变量都是空的,因为活动似乎没有与片段 UI 通信。

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

所以首先,这听起来像是正确的方法吗?使用片段来处理导航抽屉中的选项并在内容窗格中生成内容?如果是这样,我如何使它与位置活动一起使用?

4

1 回答 1

1

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

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

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

湾。仅出于纵容考虑,假设您正在或已经在某种布局中添加片段(可以说是相对布局)..这种布局可以扩展到您自己的类,请参见:http: //developer.android.com/training/自定义视图/create-view.html

现在,在您的特殊课程中,您可以使用两种方法之一(取决于您想进入的时间) - @Override protected void onFinishInflate() { super.onFinishInflate(); } 或 - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); (请记住,onMeasure 可能会被多次调用,而不仅仅是在开始时。)

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

public void setOnFinishInflatingTheChikenOrTheEggListener(IonFinished listenr)...

IonFinished 将是一个简单的界面,一个简单的功能,只告诉你,视图完成充气自己在屏幕上。

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

d。此功能已在您的活动中触发,在这里可以安全地让您碎片化,并与他一起做一些事情..因为您确定所有视图都已到位...(此时不要忘记关闭对话框)。

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

2.回答:让我们继续第二个问题,这比以前容易得多,在你的片段中你有按钮,你给他们设置一个 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.. 
}

希望它有助于更​​多地了解片段......

于 2013-07-07T03:18:17.947 回答