单击按钮后设置内容视图

时间:2015-04-24 11:45:28

标签: java android button onclick

当我的应用程序启动时,我想要一个开始游戏按钮。按下按钮时,我想要显示另一个活动。

在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);

}

单击按钮时,我的应用程序崩溃。

3 个答案:

答案 0 :(得分:1)

多次调用setContentView()是危险的,但并不总是有效。可能存在层次结构冲突,以及多次实例化视图导致的低效率。它也没那么有用,因为你无法控制布局扩展到的容器。

这是正确的方法。

Android提供了一种内置的视图切换机制,称为ViewFlipper。您可以将setContentView()对象告诉ViewFlippershowNext(),而不是为要交换的布局调用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!
    }
}

你应该得到这样的东西:

Test ViewFlipper

答案 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切换布局,片段等