两个Intent启动同一个类,getExtras()会导致IndexOutOfBoundsException

时间:2015-03-19 18:21:27

标签: android android-intent android-activity 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);
            }
        });

以及 WriteActivity onCreate()

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

正如您所看到的,在一个中,我不需要putExtra(),而在第二个中,我会这样做。

我这样做是因为我首先使用WriteActivity来为写一个音符,然后为编辑音符。 这在任何情况下都会导致 IndexOutOfBoundsException :索引0无效,大小为0

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

2 个答案:

答案 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应如何处理传入的意图。这可能是“更好”的方法,但根据您的项目可能有点过分。