当我的应用程序启动时,我想要一个开始游戏按钮。按下按钮时,我想要显示另一个活动。
在XML中我设置了这样的按钮:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/bttnStart"
android:onClick="startGame"
/>
这是Java函数:
public void startGame(View v ){
setContentView(R.layout.activity_start_menue);
}
单击按钮时,我的应用程序崩溃。
答案 0 :(得分:1)
多次调用setContentView()
是危险的,但并不总是有效。可能存在层次结构冲突,以及多次实例化视图导致的低效率。它也没那么有用,因为你无法控制布局扩展到的容器。
Android提供了一种内置的视图切换机制,称为ViewFlipper
。您可以将setContentView()
对象告诉ViewFlipper
或showNext()
,而不是为要交换的布局调用setDisplayedChild(int)
。
以下是您在main.xml
中完成此操作的方法。
<?xml version="1.0" encoding="utf-8"?>
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewflipper"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- The ViewFlipper can change through its direct children -->
<!-- Child 0 -->
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/bttnStart"
android:onClick="startGame"/>
<!-- Child 1 -->
<LinearLayout
android:id="@+id/activity_start_menu"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Here's the menu!"/>
</LinearLayout>
</ViewFlipper>
请注意,正在翻阅的视图是您正在使用的<ViewFlipper>
的直接子级。仅供参考,您可以获得两种以上的观点。
现在转到你的'MyActivity'中的Java代码。
public class MyActivity extends Activity {
ViewFlipper viewFlipper;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
}
/**
* Switches to the activity_start_menu LinearLayout
* specified in the ViewFlipper.
*/
public void startGame(View v) {
//First way -- use showNext() & showPrevious()
viewFlipper.showNext();
//Second way -- use setDisplayedChild(int) where int is
// the index of the view starting from 0
//In this case, there are two. 0 is the button,
// and 1 is the menu layout.
viewFlipper.setDisplayedChild(1);
//You can also do fancy animations to switch between views.
// Check out the methods accessible and experiment with them!
}
}
你应该得到这样的东西:
答案 1 :(得分:0)
开始活动 草案:
onCreate()
setContentView(//layout 1);
Button lButton = (Button) findview....
lButton.setOnClickListener(...)
{
onClick()
{
setContentView(//layout 2);
}
}
答案 2 :(得分:-1)
要开始新活动,您应该使用:
Intent intent = new Intent(this, YourActivity.class);
startActivity(intent);
或者,如果你不改变活动,请使用eample viewswitcher切换布局,片段等