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

时间:2015-01-09 12:48:33

标签: android android-intent

我试图从主要活动转移到第二个活动到意图: 第一个是空意图,当我按下按钮时,它会转到第二个活动。 第二个是当我在文本视图中写入一些文本时,它将此文本传递给第二个活动。 问题是当我按下第一个按钮时它会出错,但是当我传递文本时工作正常。代码:

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(对第三项活动)工作正常。

2 个答案:

答案 0 :(得分:1)

按钮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。)

   case R.id.btnSoundBubble:

  final Runnable r = new Runnable() {
  public void run() {
   MediaPlayer mpB=MediaPlayer.create(MainActivity.this, R.raw.bubble);
   mpB.start();
   }
  };
 handler.postDelayed(r, 1000);
 Intent intent = new Intent(this, Second.class);
 startActivity(intent);
 break;

2)。

case R.id.btnSoundBubble:
    Intent intent = new Intent(this, Second.class);
    startActivity(intent);
    break;

然后在SecondActivity的OnCreate

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

答案 1 :(得分:0)

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

 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"));

请在案例1中提供一些数据我提及或执行这样的检查。

if(getIntent().getExtras()!=null)
{
//do you code here..
}