这是前一个问题的扩展,但代码更多,代码更少(Android starting another activity or calling a method from another class (using fragments))。我正在尝试更好地了解Android应用程序中的片段和活动如何工作,同时编写导航抽屉的示例应用程序以及位置API代码。
据我了解,必须创建扩展活动的导航抽屉,以便正确地执行UI组件。到目前为止我所做的是将我的UI窗格分解为不同的片段,每个片段都有不同的XML和Java文件。 Java文件从其中指定的XML构建UI,并在保持导航抽屉的同时在内容窗格中显示内容,类似于:http://manishkpr.webheavens.com/android-navigation-drawer-example-using-fragments/。
除“Home”之外,其中每个片段都需要来自Location API / Location Activity的代码,该代码基于此MainActivity:https://developer.android.com/training/location/retrieve-current.html。但是我有两个问题:
我的位置活动类包含代码onCreate,用于从UI填充TextView变量。但UI全部由片段处理。因此,每次创建位置活动时,这些变量都为空,因为活动似乎与片段UI没有通信。
片段中的按钮调用仅存在于位置活动中的方法。而且他们似乎没有与活动沟通,只有他们的片段Java类。
首先,这听起来像是正确的方法吗?使用片段处理导航抽屉中的选项并在内容窗格中生成内容?如果是这样,我如何使其与位置活动一起使用?
答案 0 :(得分:1)
我已经在很多方面遇到过你在这里所说的话,我认为这里没有对错......主要是因为有时工作不能让你自由地做你想做的事。
一个。假设您不希望用户在完成片段膨胀之前做任何事情, 所以第一个动作将是(ui / ux)显示进度对话框。
湾仅对于纵容事项,假设您正在添加或已经在某种布局中添加您的片段(比如相对布局)。 这个布局可以扩展到你自己的类看到: http://developer.android.com/training/custom-views/create-view.html
现在,在您的特殊课程中,您可以使用两个中的一个(取决于您想要输入的那一刻) 要么 - @覆盖 protected void onFinishInflate(){ super.onFinishInflate(); } 要么 - @覆盖 protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){ super.onMeasure(widthMeasureSpec,heightMeasureSpec); } (请记住,onMeasure很有可能被称为很多次,而不仅仅是在开始时。)
所以,我们有一个观点,正在扩展,我们可以在我们的活动的onCreate 上创建,甚至在它被创建和膨胀之前。 在这个扩展视图中,我将添加一个公共函数,如:
public void setOnFinishInflatingTheChikenOrTheEggListener(IonFinished listenr)
...
IonFinished将是一个简单的界面,具有简单的功能,只是告诉你视图完成在屏幕上自我膨胀。
℃。现在让你的活动实现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..
}
希望有助于更多地了解片段......