我需要两次启动一个Activity(比如说 WriteAtivity ),但是在不同的模式下。 在MainActivity中会发生什么。
例如:
addNote.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent writeAct = new Intent(MainActivity.this, WriteActivity
// HERE, I DO NOT NEED OF putExtra()
startActivity(writeAct);
}
});
和
editNote.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent visualizza = new Intent(MainActivity.this, WriteActivity.class);
// HERE INSTEAD I HAVE NEED OF putExtra()
visualizza.putExtra("posizione", position);
startActivity(visualizza);
}
});
以及 WriteActivity 的 onCreate()
intent = getIntent().getExtras().getInt("posizione");
rifTitleNote.setText(listNote.get(posizione).getTitle());
正如您所看到的,在一个中,我不需要putExtra(),而在第二个中,我会这样做。
我这样做是因为我首先使用WriteActivity来为写一个音符,然后为编辑音符。 这在任何情况下都会导致 IndexOutOfBoundsException :索引0无效,大小为0
你知道我怎么能克服这个问题吗? 或者就如何做到这一点给我建议? 谢谢! :d
答案 0 :(得分:0)
只需使用getIntExtra()
默认值,并确保在使用前不将该值设置为默认值。
Intent intent = this.getIntent();
int posizione = intent.getIntExtra("posizione", -1);
if (posizione != -1){
rifTitleNote.setText(listNote.get(posizione).getTitle());
}
答案 1 :(得分:0)
如果存在,则检查是否存在额外和处理。有关Android's Intent documentation的信息,请参见hasExtra。
if (getIntent().hasExtra("posizione")) {
// Do stuff with extra
}
您还可以在Intent上设置一个操作,指示Activity应如何处理传入的意图。这可能是“更好”的方法,但根据您的项目可能有点过分。