【问题标题】:Unable to start activity ( java.lang.IllegalStateException: Already attached)无法启动活动(java.lang.IllegalStateException:已附加)
【发布时间】:2017-08-08 16:47:12
【问题描述】:

我正在尝试在我的主屏幕上构建一个带有五个按钮的应用程序。按下每个按钮都会弹出一个新活动。

当我点击第二个按钮时,它会显示错误:

**java.lang.RuntimeException: Unable to start activity ComponentInfo{debuggers.os_project/debuggers.os_project.SJF}: java.lang.IllegalStateException: Already attached**

第一个按钮工作正常。到目前为止,我只为两个按钮编写了代码。

我的 main_activity.java 是:

package debuggers.os_project;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

private static Button fcfs;
private static Button sjf;

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

    fcfs = (Button)findViewById(R.id.fcfs);
    sjf = (Button) findViewById(R.id.sjf);
    fcfs.setOnClickListener(
            new Button.OnClickListener(){
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), FCFS.class);
                    startActivity(intent);
                }
            }
    );
}

public void onSJF(View view){
    Intent intent = new Intent(view.getContext(),SJF.class);
    startActivity(intent);
}
}

【问题讨论】:

  • 给你的变量起有意义的名字会极大地帮助你阅读你的代码......
  • 分享 SJF 活动的代码。我认为问题出在那儿。这可能会有所帮助:stackoverflow.com/questions/35384888/…
  • @PavanPatil 你说得对,问题出在 SJF 活动中。感谢您的帮助。

标签: java android


【解决方案1】:

这里:

public void onSJF(View view){
   Intent intent = new Intent(MainActivity.this, SJF.class);
   startActivity(intent);
}

要启动一个新活动,请将当前活动类作为第一个参数,将下一个活动类作为第二个参数传递给 Intent 新实例!

请尝试看看这是否有效;

【讨论】:

    【解决方案2】:

    点击监听器应该是这样的:

    fcfs = (Button)findViewById(R.id.fcfs);
    fcfs.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             Intent intent = new Intent(MainActivity.this, FCFS.class);
             startActivity(intent);
    });
    

    而且你没有使用你的方法。 您可以构建一种方法,并且可以被所有按钮使用:

    public void method_for_intent (Class your_class){
        Intent intent = new Intent(MainActivity.this, your_class);
        startActivity(intent);
    }
    

    在你的 onCreate 中,最终应该是这样的:

    Button fcfs = (Button)findViewById(R.id.fcfs);
    Button sjf = (Button) findViewById(R.id.sjf);
    fcfs.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             method_for_intent(FCFS.class)
        });
    sjf.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             method_for_intent(SJF.class)
        });
    

    您可能会在新活动中多次致电oncreateIllegalStateException (Already attached) when opening NFC reader app

    (您也可以将点击监听器放入方法中) 没有测试代码。 如果我有任何问题,请告诉我。

    【讨论】:

      【解决方案3】:

      super.onCreate() 可能会在您的活动中被调用两次。检查您没有错误地这样做。

      如果你深入 Activity/FragmentActivity 代码,你会发现错误与它与 FragmentManager 的关系有关:

      您的活动通常会从继承自 FragmentActivity 的 AppCompatActivity 继承:

      // FragmentActivity
      @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
          mFragments.attachHost(null /*parent*/);
          ...
      }
      

      // FragmentController
      public void attachHost(Fragment parent) {
          mHost.mFragmentManager.attachController(mHost, mHost /*container*/, parent);
      }
      

      // FragmentManager
      public void attachController(FragmentHostCallback host, FragmentContainer container, Fragment parent) {
          if (mHost != null) throw new IllegalStateException("Already attached");
          mHost = host;
          mContainer = container;
          mParent = parent;
      }
      

      轰隆隆!

      【讨论】:

        猜你喜欢
        • 2016-05-11
        • 1970-01-01
        • 2015-04-24
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多