为什么我的应用程序在抽屉中导航时会崩溃?

时间:2016-06-25 15:45:04

标签: java android

我刚开始进行Android开发,当我浏览抽屉时,我的应用程序崩溃了。这是我在导航抽屉活动中编辑的代码。

这是我编辑的东西,当有人选择抽屉中的一个项目时,我想要新的屏幕。我创建了3个新布局(xml文件),并希望显示这些

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.call) {

        setContentView(R.layout.phone);

        et1 = (EditText) findViewById(R.id.editText);
        btn = (Button) findViewById(R.id.button1);

        btn.setOnClickListener(this);

    }


    else if (id == R.id.message) {

        setContentView(R.layout.sms);

        et2 = (EditText) findViewById(R.id.editText2);
        et3 = (EditText) findViewById(R.id.editText3);
        btn2 = (Button) findViewById(R.id.button2);

        btn2.setOnClickListener(this);
    }


    else if (id == R.id.email) {

        setContentView(R.layout.email);

        et4 = (EditText) findViewById(R.id.editText4);
        et5 = (EditText) findViewById(R.id.editText5);
        et6 = (EditText) findViewById(R.id.editText6);

        btn3 = (Button)findViewById(R.id.button3);


        btn3.setOnClickListener(this);



    }


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

1 个答案:

答案 0 :(得分:2)

您的应用崩溃了,因为您无法使用setContentView(R.layout.something)。

首先,您需要为每个XML文件创建活动。这很简单:

public class Activity1 {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.phone);  //DO THIS FOR EACH XML LAYOUT
    }
}

然后不要忘记另一个重要的事情,将每个活动添加到AndroidManifest.xml。您的清单文件可能已经包含以下内容:

<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    //ADD NEXT 2 LINES FOR EACH NEW ACTIVITY YOU MAKE
    <activity
        android:name=".Activity1">
</application

然后,您需要做的最后一件事是在onNavigationItemSelected方法中。

取代setContentView(R.layout.something),执行以下操作:

Intent intent = new Intent(this, Activity1.class);
startActivity(intent);

如果我的答案中有任何不清楚的地方,请随时提出。

注意:如果您希望应用通过导航栏更改活动,则可以使用此选项。您可能希望查看片段以获得不同的方法。

编辑:这是Google关于活动的教程的链接:

https://developer.android.com/training/basics/firstapp/starting-activity.html

以下是另一个示例的链接,您可能更容易理解:

http://hmkcode.com/android-start-another-activity-within-the-same-application/