Android片段和活动问题

时间:2013-07-06 23:17:12

标签: android android-intent android-fragments android-activity

这是前一个问题的扩展,但代码更多,代码更少(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。但是我有两个问题:

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

  2. 片段中的按钮调用仅存在于位置活动中的方法。而且他们似乎没有与活动沟通,只有他们的片段Java类。

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

1 个答案:

答案 0 :(得分:1)

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

  1. 答案: 是的你是对的,你在这里有某种“鸡蛋和鸡肉”的情况,所以,如何解决它:
  2. 一个。假设您不希望用户在完成片段膨胀之前做任何事情, 所以第一个动作将是(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.. 
    }
    

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