2015-08-09 78 views
2

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

我也在尝试在我的活动中提供多于一个片段的活动,例如活动的平板电脑版本。

这也带来了另一个问题,我有,我有我的创作里面胡亚蓉菜单也是我的片段我应该在哪里进行检查

onOptionsItemSelected 

的活动或片段里面里面?

任何帮助,任何人都可以提供将感激地赞赏,因为现在的我在哪里,我应该处理的点击事件和菜单

在此先感谢

+0

您应该在相应的片段中处理onClick事件。 onOptionsItemSelected应该去你的活动,因为它覆盖活动的方法和菜单是为你的所有片段。 – sider

+0

尝试使用eventbus [链接](http://square.github.io/otto/) –

回答

2

您可以处理片段内部或活动本身内的点击事件,这取决于您尝试实现的内容。就像假设,如果onClick事件执行了一些由片段本地处理的工作,那么您应该在片段本身中处理它,但是如果onClick事件做了一些与其他片段相关的工作(即包含在同一活动中的其他片段),那么您应该使用回调方法(侦听器)让活动处理单击事件。例如。假设您有两个片段即LogInFragment和LogOutFragment,并且您只在活动内部一次显示一个片段。然后让我们说一下当活动开始时,您显示的LogInFragment包含一个名为Log In的按钮。当您单击按钮时,您可以在活动中处理onClick事件,以便它可以使用LogOutFragment替换此片段。 考虑另一种情况假设LogInFragment内部单击Log In按钮时,只想将该按钮的文本更改为“注销”,那么可以在片段本身内部进行处理,因此总体上只需考虑您尝试实现的内容,相应地处理事件。

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

+0

谢谢,很好的解释。现在明白了。 – Martin

0

如果有菜单中的片段,显得很迷茫在所有情况下。平板电脑和手机。那么你只需要在你的片段中的选项菜单,活动选项菜单将永远不会出现。

在所有情况下添加以下到您的片段类:

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

处理的片段本身和活动onOptionsItemSelected活动菜单onOptionsItemSelected片段菜单。这是活动处理一个并不总是存在的功能的最佳实践。对?点击事件也是如此。

如果您需要的活动来处理这些事件,你可以从你的片段里得到它如下:

ActivityClassName activity = getActivity(); 

即使设置为活动有一定的价值。做它的片段。这只是一个意见。但相信这是最好的做法。

0

问题是,这个问题没有一个答案隐约。您的片段或特定的片段中的视图可以获得点击事件。您通常应该在点击事件中处理它们。如果他们需要告诉活动,那么你需要一种方法来促进片段和活动之间的交流,如果你不这样做的话。你可以有自己的菜单项的片段。

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

我为了特定目的在不同的时间做了两种方法。有时候你的Fragment就像一个特殊的控制接口,用于你的Activity的一部分,有时它是做它自己的事情。所有这些事情都有一个答案,因为没有一个程序。

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

如果你想要一个更具体的答案,给一个更具体的问题。