在Android中,我应该在片段或活动中收到片段点击事件吗?

时间:2015-08-09 09:34:42

标签: android android-fragments android-activity

我对收到例如我片段中的点击事件感到困惑,我应该将此点击事件传递给我的活动还是在片段本身处理?

当我在活动中提供超过1个片段时,我也在努力解决这个问题,例如,活动的平板电脑版本。

这也提出了我的另一个问题,我在我的活动中创建了一个菜单,还在我的片段里面,我应该在哪里查看

 onOptionsItemSelected

在活动或片段内?

我对处理点击事件和菜单的位置感到很困惑。

3 个答案:

答案 0 :(得分:2)

您可以处理片段内部或活动本身的点击事件,这取决于您要实现的目标。就像假设onClick事件做一些由片段本地处理的工作一样,你应该在片段本身处理它,但是如果onClick事件做了一些与其他片段有关的工作(即同一活动中包含的其他片段)那么您应该使用回调方法(侦听器)让活动处理click事件。

例如。假设您有两个片段,即LogInFragment和LogOutFragment,并且您只在活动内一次显示一个片段。然后让我们说当活动开始时你正在显示LogInFragment,它有一个名为Log In的按钮。单击该按钮时,您可以在活动中处理onClick事件,以便它可以使用LogOutFragment替换此片段。

假设另一种情况假设在LogInFragment内部单击“登录”按钮时,您只想将按钮的文本更改为“退出”"然后这可以在片段本身内部处理,因此总体上只考虑你想要实现的目标并相应地处理事件。

第二部分:onOptionsItemSelected()方法放在activity类中,它处理菜单项的单击。现在,如果你在片段中使用另一个菜单,那么这个特定的菜单项点击/选择事件应该在片段的类中处理,相当简单。

答案 1 :(得分:0)

如果具有菜单的片段出现在所有情况中。平板电脑和手机。然后,您只需要片段中的选项菜单,“活动”选项菜单将永远不会出现。

在所有情况下,将以下内容添加到您的片段类中:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
} 

处理片段本身的片段菜单onOptionsItemSelected和活动中的onOptionsItemSelected的活动菜单。这是最佳实践,为什么Activity应该处理并不总是存在的功能。对?点击事件也是如此。

如果您需要活动来处理这些事件,您可以从片段中获取它,如下所示:

ActivityClassName activity = getActivity();

甚至为活动设置一些值。在片段中做。这只是一个意见。但相信这是最好的做法。

答案 2 :(得分:0)

问题在于,这个问题的答案含糊不清。您的片段或特定片段中的视图会获得点击事件。您通常应该在点击事件中处理它们。如果他们需要告诉Activity一些东西,那么你需要一种方法来促进片段和活动之间的通信,如果你不这样做的话。你可以拥有自己的菜单项片段。

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
...
}

为了特定目的,我在不同时间以两种方式完成了这项工作。有时你的Fragment就像是你Activity的一部分特殊控制界面,有时它正在做它自己的事情。所有这些都有一个答案,因为没有一个程序。

没有一种尺寸适合所有答案。但是,通常你应该处理被点击的对象中的点击事件,除非他们所做的只是告诉其他一些对象,然后他们应该这样做。

如果您想要更具体的答案,请提供更具体的问题。