2016-09-30 80 views
0

当屏幕上有多个片段时,如何判断用户以何种方式与特定的片段进行交互?也许他们点击一个按钮,滚动列表,选项卡通过字段,任何东西。如何判断用户何时与片段交互?

我曾想过,也许我会在包含片段UI的片段/根布局的片段/ FrameLayout上获得onClick/onTouch/onFocusChanged侦听器,但它们不会触发。

我会尝试设置各种手动触发器,例如“如果用户单击此按钮或滚动此视图或此字段获得焦点,那么用户已与此片段交互”,但显然这是更复杂和更容易不准确的行为。

不知道为什么我需要这个?以下是使用案例:

想想平板电脑上的Gmail:在横向上,收件箱显示在左侧,第一条消息显示在右侧。如果我点击不同的信息,它会显示在右侧。如果我旋转到肖像,它会显示我上次选择的消息。

如果我以肖像开头,它会显示收件箱。

现在,我们来看看真正的技巧:我从横向开始,在左侧显示收件箱,在右侧显示第一条消息。如果我立即将设备旋转到肖像。但是,如果我与右侧的窗格进行交互(例如,滚动电子邮件),然后旋转设备,它将显示第一条消息。 Gmail猜测我是否对收件箱或电子邮件更感兴趣,并表明这一点。

我的挑战是在应用程序中做类似的事情。当我从横向(显示两个窗格)旋转到纵向(显示一个窗格)时,我不确定是显示列表视图还是默认的详细视图。如果我可以告诉用户是否以某种方式(通过键盘或触摸屏)与详细视图进行交互,那么我知道要证明这一点。

+0

你试过这个:http://stackoverflow.com/questions/21882251/how-to-handle-touch-events-on-a-fragment?如果你的片段没有得到这个事件,那意味着其他一些视图拦截它。 –

+0

是的,我已经尝试了根布局上的onTouchListener。它不会着火。 –

回答

0

最后,我找不到任何好的,干净的方式来工作。

相反,对于用户可以与Fragment进行交互的每种单独的方式 - 触摸ListView,单击按钮等 - 我将触发一条消息给Activity(使用Listener接口的Activity实现,课程)。

然后Activity会跟踪用户是否与默认Fragment交互,确保保存并恢复该值。

这很混乱,但这是我所能想到的。 :/