更改布局时多次使用 setContentView 是否不好?
有些人说这很糟糕,他们从不说为什么。
还有其他东西可以使用按钮更改布局吗?
更改布局时多次使用 setContentView 是否不好?
有些人说这很糟糕,他们从不说为什么。
还有其他东西可以使用按钮更改布局吗?
让我们看一下Android 文档:
将活动内容设置为显式视图。此视图直接放置在活动的视图层次结构中。
因此,setContentView
将覆盖布局,并将其替换为新布局。通常,您只想在 onCreate 中执行一次。从理论上讲,您可以做更多,但它涉及重新绘制整个布局,这可能需要一些时间。有几种选择,具体取决于您想要什么:
至于您的具体应用,我会这样做:
Android SDK展示了如何将数据从一个活动传递到另一个活动。只需从第一个活动中传递第二个活动所需的数据,使用如下所示:
Intent intent=new Intent(...);
intent.putExtra("Album","Some Album")
startActivity(intent);
第二个活动将这样做:
Intent intent=getIntent();
String albumName=intent.getExtraString("Album");
//Does something with albumName, maybe get a TextView and .setText()
是的,这很糟糕,因为它会使您的活动与您的布局一起膨胀,并且如果您的布局有很多视图,则可能需要一些时间。
为避免这种情况,您应该使用ViewAnimator,在其中放置所有布局并通过 showNext() 和 showPrevious() 进行切换,即:
<ViewAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ViewAnimator"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RelativeLayout> </RelativeLayout>
<RelativeLayout> </RelativeLayout>
</ViewAnimator>
在您的代码中:
// Don't forget the setContentView
//
// Load the ViewAnimator and display the first layout
ViewAnimator va = (ViewAnimator) findViewById(R.id.ViewAnimator);
// Switch to the second layout
va.showNext();
// Add another layout at the third position
LinearLayout fooLayout = new LinearLayout(this);
va.addView(fooLayout, 3, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
我无法展示示例,因为我正在等待答案。好的,我有歌词应用程序(它将显示乐队的歌词)和专辑是新活动,但我不想要很多活动,这就是为什么我只想制作歌曲布局并通过按钮按下来更改视图
听起来你正在以错误的方式解决这个问题。如果您想更改Activity
包含的 UI,那么Fragment
s 将是更好的方法。那里有一些学习曲线,但它是很好的 android 设计,并且有据可查。
此外,您似乎混淆了格式和内容。如果您要显示歌词,则不需要为每首歌曲设置新的布局。您只需要更改歌词并将它们保持在相同的活动中。您所做的类似于为您打算访问的每个网页创建一个新的网络浏览器。相反,找到一种方法来存储歌词并将它们显示在单个活动(或片段中)以显示这些歌词。这同样适用于每张专辑:一个活动将在角落(或作为背景)显示专辑封面、标题、发行日期等,作为文本,然后是下面的歌曲列表。s的实际内容TextView
可以改变,但布局应该是一样的。