很难尝试和说出这个问题,但我会尽我所能。
基本上,我有一个应用程序,我想更多地分割代码。为了尝试解释这一点,我将给出一个我的屏幕示例。
在我的主屏幕中,我有一个标题,用户详细信息,余额,下一个帐单详细信息和使用详情。我想将这些部分分成各自的视图。所以我在我的主XML文件中有5个不同的RelativeLayouts,比如这个
<RelativeLayout android:orientation="vertical"
android:layout_below="@+id/title" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:id="@+id/layout1">
</RelativeLayout>
我想在主屏幕上使用的每个功能一个。正如您所看到的,我还将每个布局设置在先前布局下方,因此顺序为title,layout1,layout2,layout3,layout4。 (我这样做的原因是,我希望每个布局都可以互换,即我可以删除layout2,然后命令为title,layout1,layout3,layout4,因为我可能不需要第二个布局,具体取决于所需的应用)
所以在我的主要活动类中,我调用了每个布局。
layoutTitle = (RelativeLayout) findViewById(R.id.title);
layout1 = (RelativeLayout) findViewById(R.id.layout1);
layout2 = (RelativeLayout) findViewById(R.id.layout2);
layout3 = (RelativeLayout) findViewById(R.id.layout3);
layout4 = (RelativeLayout) findViewById(R.id.layout4);
然后我使用布局充气器
View view;
LayoutInflater inflater = (LayoutInflater) getBaseContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.userdata, null);
为我在xml文件中定义的每个布局设置布局。
我想知道的是,是否可以扩充另一个活动而不是XML文件?我问这个的原因是,我说主屏幕的每个功能都由标题,用户详细信息,余额等组成,我对每个功能都有一个活动。这些函数中的每一个都具有我设计的自定义功能,例如动画等。如果我只是夸大这些xml文件,那么我无法访问里面的小部件,所以我无法从Java设置我需要的功能
如果我能够膨胀另一个活动,那么这不会是一个问题,因为我会为活动中的每个功能设置功能,然后只是膨胀该类。
我希望我的问题很明确,如果不是,我可以扩展你不确定的任何领域。
非常感谢任何帮助!!
编辑:如果无法给课程膨胀,那么你能推荐哪种方法可以解决我的问题吗?
答案 0 :(得分:3)
我跟你一模一样。
我在Java活动中使用组合来实现我的活动中的功能共享。我认为活动是“上下文”,而不是我的页面中被复制的部分。因此,当我处于某个特定上下文(一个活动)时,我会显示layout1,layout2和layout3以及特定参数,以及依赖于该活动的特定内容。在另一项活动中,layout1,2或3可能会有所不同,但它们在我的屏幕上始终具有相同的位置。
我通过视图使用组合:我的所有活动都有一个超类(称之为你想要的任何东西,比如ActivityWithCustomLayout
,它包含我作为类成员的所有布局(如ViewGroup
)。它们受到保护,因此每个变量layout1
,layout2
和layout3
都可用于此超类的所有子类活动。
在特定活动中,我使用以下内容填充onCreate
方法中的每个布局:
layout1.addView(...something inflated from an XML that depends on that specific activity...);
layout2.addView(...same principle...);
事实上,我所有的XML布局都是活动的“部分”,我在运行时将其扩展为视图,我会在需要时动态添加到活动中。
你是对的,这些解释并不容易:)
如果你定位Android&gt; = Honeycomb(包括ICS)然后查看Fragment框架,它可能是一种更简单的方法来实现所有这些(还没有看过)
答案 1 :(得分:1)
答案不是太多,但我经常发现自己将布局本身分类。然后,在onFinishInlate()
回调中,我使用findByViewId
连接所有视图引用。在您的XML中,您可以将<RelativeLayout>
替换为<com.company.CustomLayout>
,假设您的CustomLayout
是RelativeLayout
的子类。
如上所述,您可以将它们拉出到单独的文件中,并将其包含在include
标记中。这使重构变得容易,并允许您重用布局组件。
或者,如果您从代码中扩充这些子类布局,则不必担心活动中所有混乱的findViewById
调用。
碎片也很棒,并且与活动具有相似的生命周期。祝你好运!
答案 2 :(得分:0)
我不确定您是否需要在“活动”中对所有这些视图进行充气。请考虑使用布局中的include
和merge
标记。这应该有助于您入门:http://developer.android.com/resources/articles/layout-tricks-merge.html
您还可以切换布局的可见性。因此,您可以用XML声明它们,将它们初始化为visibility="false"
,然后在Java代码中切换该可见性。
你还说过:“如果我只是夸大这些xml文件,那么我就无法访问里面的小部件,所以我无法从Java中设置我需要的功能。”
使用findViewById
将任何布局组件添加到活动后,可以访问它,并将其返回的对象转换为相应的类型。