我正在尝试使用主屏幕上的五个按钮构建一个应用程序。按下每个按钮时会弹出一个新活动。
当我按下第二个按钮时,显示错误:
**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);
}
}
答案 0 :(得分:0)
下面:
for k in some_dict:
# k is a string
# some_dict[k] return the value of k in the dict
要开始一个新活动,您将当前活动类作为第一个参数传递,将下一个活动类作为Intent新实例的第二个参数传递!
请尝试看看是否有效;
答案 1 :(得分:0)
应如下所示:
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)
});
您可以在新活动中多次致电oncreate
。
IllegalStateException (Already attached) when opening NFC reader app
(您也可以将点击监听器放入方法中) 避免测试代码。 如果我有什么不妥,请高高在上。
答案 2 :(得分:0)
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;
}
BOOM!