在更改布局时多次使用setContentView?
有些人说这很糟糕,他们从不说明原因。
还有其他一些东西可以使用按钮更改布局吗?
答案 0 :(得分:9)
我们来看看Android Documents:
将活动内容设置为显式视图。此视图直接放在活动的视图层次结构中。
因此,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()
答案 1 :(得分:1)
是的,这很糟糕,因为它会使您的布局夸大您的活动,如果您的布局有很多视图,则可能需要一些时间。
为了避免你应该使用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));
答案 2 :(得分:0)
我无法展示示例,因为我正在等待回答。好的我 有歌词的应用程序(它将显示乐队的歌词)和专辑是新的 活动,但我不想要很多活动,这就是我想要的原因 只按歌曲布局并按下按钮
更改视图
听起来你正在以错误的方式解决这个问题。如果您要更改Activity
包含的用户界面,那么Fragment
将是更好的方法。那里有一点学习曲线,但它的设计很好,well documented。
此外,您似乎混淆了格式和内容。如果您正在显示歌词,则不需要为每首歌曲设置新的布局。你只需要改变歌词并将它们保持在同一个活动中。您正在做的是为您打算访问的每个网页创建一个新的Web浏览器。相反,找到一种方法来存储歌词并将它们显示在单个活动(或片段)中以显示这些歌词。这同样适用于每张专辑:一个活动会在角落(或作为背景),标题,发行日期等显示专辑封面,作为文本,然后是下面的歌曲列表。 TextView
的实际内容可能会发生变化,但布局应该相同。