Android 如何将不同类型的意图转移到另一项活动?

Android 如何将不同类型的意图转移到另一项活动?,android,android-intent,Android,Android Intent,我正试图从主要活动转移到第二个活动,以达到以下目的: 第一个是空的意图,当我按下一个按钮时,它进入第二个活动。 第二个是当我在文本视图中编写一些文本时,它会将这些文本传递给第二个活动。 问题是,当我按下第一个按钮时,它会给出一个错误,但当我传递文本时,它工作正常。守则: public class MainActivity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle

我正试图从主要活动转移到第二个活动,以达到以下目的: 第一个是空的意图,当我按下一个按钮时,它进入第二个活动。 第二个是当我在文本视图中编写一些文本时,它会将这些文本传递给第二个活动。 问题是,当我按下第一个按钮时,它会给出一个错误,但当我传递文本时,它工作正常。守则:

public class MainActivity extends Activity implements OnClickListener {

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

    Button btnSoundBubble=(Button) findViewById(R.id.btnSoundBubble);
    Button btnSoundFrog=(Button) findViewById(R.id.btnSoundFrog);
    Button btnSend=(Button) findViewById(R.id.btnSend);
    btnSoundBubble.setOnClickListener(this);
    btnSoundFrog.setOnClickListener(this);
    btnSend.setOnClickListener(this);

    final ImageView iv=(ImageView) findViewById(R.id.iv);
    iv.setBackgroundResource(R.anim.anima);
    iv.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            AnimationDrawable anim= (AnimationDrawable) iv.getBackground();
            anim.start();

        }
    });
}


@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.btnSoundBubble:
        Intent intent = new Intent(this, Second.class);
        startActivity(intent);
        MediaPlayer mpB=MediaPlayer.create(MainActivity.this, R.raw.bubble);
        mpB.start();
        break;
    case R.id.btnSoundFrog:
        MediaPlayer mpF=MediaPlayer.create(MainActivity.this, R.raw.frog_croaking);
        mpF.start();
        Intent intent1=new Intent(this,Third.class);
        startActivity(intent1);
        break;      
    case R.id.btnSend:
        String g;
        EditText editText1=(EditText) findViewById(R.id.editText1);
        g=editText1.getText().toString();
        Intent intent2=new Intent(this,Second.class);
        intent2.putExtra("name", g);
        startActivity(intent2);
        break;
    }       
}
}
第二项活动

public class Second extends Activity implements OnClickListener {

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

    EditText editText2=(EditText) findViewById(R.id.editText2);
    Intent intent=new Intent(this,MainActivity.class);
    editText2.setText("You tapped: "+getIntent().getExtras().getString("name"));

    final ImageView imageView=(ImageView) findViewById(R.id.imageView2);
    imageView.setBackgroundResource(R.anim.anima);
    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            AnimationDrawable anim=(AnimationDrawable) imageView.getBackground();
            anim.start();

        }
    });

    Button btnBack=(Button) findViewById(R.id.btnBack);
    btnBack.setOnClickListener(this);


}

@Override
public void onClick(View v) {
    Intent intent=new Intent(this, MainActivity.class);
    startActivity(intent);  
}
}

意图1(到第三个活动)工作正常。

在这种情况下,您不会向第二个活动发送任何数据

 case R.id.btnSoundBubble:
    Intent intent = new Intent(this, Second.class);
    startActivity(intent);
    MediaPlayer mpB=MediaPlayer.create(MainActivity.this, R.raw.bubble);
    mpB.start();
    break;
case R.id.btnSend:
        String g;
        EditText editText1=(EditText) findViewById(R.id.editText1);
        g=editText1.getText().toString();
        Intent intent2=new Intent(this,Second.class);
        intent2.putExtra("name", g);
        startActivity(intent2);
        break;
但在这种情况下,您将向第二个活动发送数据

 case R.id.btnSoundBubble:
    Intent intent = new Intent(this, Second.class);
    startActivity(intent);
    MediaPlayer mpB=MediaPlayer.create(MainActivity.this, R.raw.bubble);
    mpB.start();
    break;
case R.id.btnSend:
        String g;
        EditText editText1=(EditText) findViewById(R.id.editText1);
        g=editText1.getText().toString();
        Intent intent2=new Intent(this,Second.class);
        intent2.putExtra("name", g);
        startActivity(intent2);
        break;
在第二个活动中,您总是允许获得这样的额外活动

EditText editText2=(EditText) findViewById(R.id.editText2);
    Intent intent=new Intent(this,MainActivity.class);
    editText2.setText("You tapped: "+getIntent().getExtras().getString("name"));
if(getIntent().getExtras()!=null)
{
//do you code here..
}
请在我提到的案例1中提供一些数据,或执行类似的检查

EditText editText2=(EditText) findViewById(R.id.editText2);
    Intent intent=new Intent(this,MainActivity.class);
    editText2.setText("You tapped: "+getIntent().getExtras().getString("name"));
if(getIntent().getExtras()!=null)
{
//do you code here..
}

按钮1的代码:

case R.id.btnSoundBubble:
        Intent intent = new Intent(this, Second.class);
        startActivity(intent);
        MediaPlayer mpB=MediaPlayer.create(MainActivity.this, R.raw.bubble);
        mpB.start();
        break;
启动另一个活动后,您正在创建
MediaPlayer
的对象。这不是正确的做法

您可以做什么:

1.)

(二)

然后在第二个活动的
OnCreate
中:

 MediaPlayer mpB=MediaPlayer.create(MainActivity.this, R.raw.bubble);
        mpB.start();

在第一个按钮中,您首先传递意图,然后创建MediaPlayer对象,这是错误的方式,请按照第二个按钮中的方式进行,(更改代码顺序),因为传递意图时会丢失当前上下文,请将第一个按钮的代码顺序设置为1)创建MediaPlayer对象2)激发意图检查我的答案!很乐意帮忙。单击前面的勾号选择我的答案。:)