两个启动相同 class 的 Intent,getExtras() 导致 IndexOutOfBoundsException

Two Intents that start the same class, getExtras() cause IndexOutOfBoundsException

我需要启动一个 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);
            }
        });

并在onCreate()写入Activity

intent = getIntent().getExtras().getInt("posizione");
rifTitleNote.setText(listNote.get(posizione).getTitle());

如您所见,在 one 中我不需要 putExtra() 而在 second 中我需要。

我这样做是因为我使用 WriteActivity,首先,写笔记,然后,编辑笔记。 这在任何情况下都会导致 IndexOutOfBoundsException: Invalid index 0, size is 0

你知道我怎样才能克服这个问题吗? 或者给我建议如何做到这一点? 谢谢! :D

只需使用带默认值的getIntExtra(),使用前确保该值未设置为默认值。

Intent intent = this.getIntent();    
int posizione = intent.getIntExtra("posizione", -1);
if (posizione  != -1){
 rifTitleNote.setText(listNote.get(posizione).getTitle());
}

检查extra是否存在,如果存在则进行相应处理。参见 Android's Intent documentation for hasExtra

if (getIntent().hasExtra("posizione")) {
    // Do stuff with extra
}

您还可以在 Intent 上设置一个操作,指示 Activity 应如何处理传入的 Intent。这可能是 "better" 方法,但根据您的项目可能有点矫枉过正。