关于Stack Overflow的第一个问题,如果它没有很好地形成则道歉.
我正在开发一个相对复杂的选项卡式的应用程序,并且已经有了基本建立起覆盖信息,敬请说的ActivityGroup和TabActivity已被弃用之前,优选的模式是使用视图.
我在使用视图方面没有遇到任何问题,这是关于体系结构而不是语法的问题(这就是为什么我没有发布任何代码).具体来说,我应该如何重组应用程序以使用视图而不是Intent启动的活动.
该应用有五个选项卡; 两个持有单一布局,没有问题.其他三个选项卡正在运行具有2-5个不同活动的ActivityGroup(即运行设置活动的选项卡,其中单击每个视图会启动一个处理该特定设置的新活动,按后退按钮可返回更广泛的设置活动/视图).如果我将每个Tab保持为TabActivity,那么将这些内部转换更改为视图仍然相当容易,而不是单独的活动.
主要问题是使用ONLY视图,根本没有TabActivity/Activity组.我所做的绝大多数研究都是讨论是否使用"活动"或"视图",或者是否使用特定语法.我无法清楚地了解如何实际转换到整个应用程序中的视图.
如果我这样做,整个应用程序现在不会在一个Activity中运行 - 一个托管标签布局的活动?
如果(1)为真,如何管理?尽管不推荐使用ActivityGroup,但所有Android文档似乎仍然表明,对于功能的各个方面,最好使用单独的活动 - 这是有道理的.Android开发团队是否只是决定堆栈和设备的成本使TabActivity实现无效?
如果应用程序在一个Activity中运行,该Activity管理每个选项卡的不同视图(然后在必要时在一个选项卡中包含不同的视图),我是否应该使用一个巨大的onClick方法来处理来自任何可点击视图的所有点击,处理输入基于哪个视图是否有效?或者我应该以编程方式注册和取消注册我的所有听众?
使用单个Activity,任何点击侦听器或任何广播接收器都不会一直运行,即使在不必要的情况下也会消耗资源吗?
使用单个Activity,后退按钮将从其功能中的任何位置退出整个应用程序.如果我正在使用视图,我是否不得不一直覆盖onBackPressed()并仔细管理应用程序行为以强制它"像Android应用程序一样"?
我觉得这完全错了吗?当我应该采用完全不同的设计方法来使用制表符和视图时,我可能无意中尝试使用视图重新创建ActivityGroup和TabActivity功能.
当谷歌的人们说我们不再将活动当作标签时,马克墨菲先生如此强烈赞同,我倾向于相信.我根本无法研究一种切换方式,而无需手动重新创建大量的Activity功能(可能包括各种脏黑客).
任何愿意解决这种模糊和被覆盖的主题的人都要提前感谢.
我觉得这个问题已经有了答案,但我找不到答案.
我的布局中有一个ScrollView,它包含各种可点击的视图.
在特定条件下,我想禁用ScrollView及其所有子项的点击和事件.
以下没有帮助:
ScrollView.setEnabled(false)
ScrollView.setClickable(false)
ScrollView.setOnTouchListener(null)
Run Code Online (Sandbox Code Playgroud)
以及:
(parent view of the ScrollView).requestDisallowInterceptTouchEvent()
Run Code Online (Sandbox Code Playgroud)
我用以下代码创建了一个自定义ScrollView:
public class StoppableScrollView extends ScrollView
{
private static boolean stopped = false;
public StoppableScrollView(Context context)
{
super(context);
}
public StoppableScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
if(stopped)
{
return true;
}
else
{
super.onInterceptTouchEvent(ev);
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev)
{
if(stopped)
{
return true;
}
else
{
super.onTouchEvent(ev);
return false;
}
}
public static …Run Code Online (Sandbox Code Playgroud)