【问题标题】:Error : onCreate(Bundle) is already defined in this activity错误:onCreate(Bundle) 已在此活动中定义
【发布时间】:2015-02-11 10:40:36
【问题描述】:

作为 Android 应用程序开发的新手,我试图学习使用 Intent 连接两个活动。我尝试了书中的代码。它不断抛出一个错误说 - 'onCreate(Bundle)' 已经在 MainActivity 类以及 NewActivity 类中定义。如果我能找到解决方案,将会有很大的帮助。

MainActivity.class

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_new);

        View view = getWindow().getDecorView().findViewById(android.R.id.content);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent startIntent = new Intent(MainActivity.this, NewActivity.class);
                startActivity(startIntent);
            }
        });

    }

NewActivity.class

public class NewActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_new);
    }
}

【问题讨论】:

  • 为什么你有两次?
  • 要连接两个活动,您只需在`protected void onCreate(Bundle savedInstanceState)` 中放入此意图:Intent i = new Intent(FromActivity.this, ToActivity.class); startActivity(i);
  • @Blackbelt :我正在学习如何做,我在一本书中遇到了这段代码。
  • 你有两个 onCreate 方法,这是完全错误的......看看这个简单的例子:mkyong.com/android/…
  • 您需要大量介绍 Java

标签: java android


【解决方案1】:

如果你想连接这些活动,你必须这样做:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        View view = getWindow().getDecorView().findViewById(android.R.id.content);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent startIntent = new Intent(MainActivity.this, NewActivity.class);
            startActivity(startIntent);
        }
    });

}

然后在你的第二个活动中删除:

  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_new);
}

然后复制这个:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new);
}

它会起作用的。

【讨论】:

    【解决方案2】:

    只需将您的 NewActivity 更改为:

    public class NewActivity extends Activity {
    
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            setContentView(R.layout.activity_new);
        }
    }
    

    一个类只能包含一个onCreate()方法。先了解Activity生命周期http://developer.android.com/training/basics/activity-lifecycle/starting.html

    【讨论】:

      【解决方案3】:

      只需删除您的主要活动和新活动上的第一个 onCreate 事件。你不需要两次

       public class MainActivity extends Activity {
      
      @Override
      /*protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      }*/
      
      public void onCreate(Bundle icicle) {
          super.onCreate(icicle);
          setContentView(R.layout.activity_new);
      
          View view = getWindow().getDecorView().findViewById(android.R.id.content);
          view.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Intent startIntent = new Intent(MainActivity.this, NewActivity.class);
                  startActivity(startIntent);
              }
          });
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多