为什么我的应用程序崩溃时,我改变其布局?

时间:2017-03-07 10:16:22

标签: java android android-layout android-studio android-activity

我想在android studio上使用set content view在显示真正的主要活动之前在屏幕上显示欢迎消息。

我只是复制我认为它对我的应用程序崩溃负责的代码部分,因为如果我删除了欢迎活动的部分,我将不会收到任何错误。

记住android studio不会在你运行它时显示错误,程序会崩溃。 有没有办法让它不崩溃?

(任何建议都可以让更好的布局更改,因为我将在稍后的活动中添加更多布局)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcom);
    Button btn = (Button) findViewById(R.id.button);
    View.OnClickListener welcomeListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setContentView(R.layout.activity_main);
        }
    };
    btn.setOnClickListener(welcomeListener);
  }

8 个答案:

答案 0 :(得分:3)

你应该使用Intent而不是在Click上使用setContentView(R.layout.activity_main)

 button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
             Intent k = new Intent(Welcomactivity.this, MainActivity.class);
             startActivity(k);

                }

            });

答案 1 :(得分:1)

我建议您使用片段:您的活动开始,显示带欢迎消息和按钮的第一个片段,用户单击按钮然后您替换第一个片段(不将其添加到Backstack,因此您不会第二个用back点击时再回到它!看看here

答案 2 :(得分:1)

使用此方法加载MainActivity:

Query

答案 3 :(得分:1)

试试这个 -

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getIntent()!=null){
            if (getIntent().getBooleanExtra("REFRESH",false)){
                setContentView(R.layout.activity_main);
            } else{
                setContentView(R.layout.activity_welcom);
            }
        }else{
            setContentView(R.layout.activity_welcom);
        }

        Button btn = (Button) findViewById(R.id.button);
        View.OnClickListener welcomeListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mIntent = new Intent(this,CurrentClass.class);
                mIntent.putExtra("REFRESH",true);
                startActivity(mIntent);
            }
        };
        btn.setOnClickListener(welcomeListener);
    }

答案 4 :(得分:1)

在一个活动中添加多个布局的最佳选择是在活动中使用碎片,从而提供更好的性能。 setContentView不是一种优先方式,只能在Activity中使用一次。阅读本文档,您将更好地了解您需要做的所有事情:enter link description here

答案 5 :(得分:0)

这不是它的工作方式。您可以显示包含欢迎消息的对话框,也可以使用ViewSwitcher并在onClick上切换布局。另一个选择是使用主布局启动一个新的onClick活动,无论你做什么,在这种情况下不要多次设置SessionView。

答案 6 :(得分:0)

如前所述,最好使用Intent在屏幕之间切换。 从您的欢迎活动开始,然后在onClick上运行下一个:

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

此外,您可以尝试使用片段来实现此目的。但更好的做法 - 只需将您的启动画面放在FrameLayout的主要活动布局上,然后点击它setVisibility(Visibility.GONE)

答案 7 :(得分:-1)

我们做到了。如果其他人有同样的问题,请使用以下步骤: 我把我的代码编辑成了这样的东西:

`

 View.OnClickListener welcomeListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
  Intent intent = newIntent(YourCurrentActivity.this,MainActivity.class);
        startActivity(intent);
    }
};
btn.setOnClickListener(welcomeListener);
}

` 然后我去android清单并在那里添加我的Welcome类。 为什么?因为在android studio日志中有一个错误,你没有将类添加到android manifest.xml

`

<activity android:name=".WelcomeClass">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <meta-data
        android:name="com.blog.software.app.WelcomeClass"
        android:resource="@layout/activity_welcom"/>
</activity>

` 你的所有答案都很有用,我和他们解决了。感谢每一个人