将多个意图从一个活动发送到另一个活动 [英] Sending Multiple Intents from a Single Activity to Another Activity

查看:27
本文介绍了将多个意图从一个活动发送到另一个活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 android 很陌生,我正在尝试将用户输入的数据(他们的名字)发送到另一个活动.过去,我能够使用 Intent 在活动之间发送单行,但我无法弄清楚如何将两个不同的字符串发送到两个不同的 TextView.

I am very new to android, and I am trying to send user-inputted data (their names) to another activity. I have in the past been able to send single lines between activities using Intents, but I have not been able to work out how to send two different strings to two different TextViews.

这是我目前的 MainActivity 代码:

Here is my code for the MainActivity so far:

package com.example.game;

import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;
import android.widget.AutoCompleteTextView;

public class MainActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button)findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            sendNames();
            sendNames2();
        }
    });
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
public void sendNames() {
    //sends player1's name to mainGame
    Intent intent = new Intent (this, MainGame.class);
    EditText player1 = (EditText) findViewById(R.id.player1);
    String message = player1.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}//sends player2's name to mainGame
 public void sendNames2(){
    Intent intent2 = new Intent(this, MainGame.class);
    EditText player2 = (EditText) findViewById(R.id.player2);
    String message2 = player2.getText().toString();
    intent2.putExtra(EXTRA_MESSAGE, message2);
    startActivity(intent2);
}
}

我的第二个活动 MainGame 的代码:

Code for my second activity, MainGame:

package com.example.game;

import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.annotation.SuppressLint;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
import android.annotation.TargetApi;
import android.os.Build;
import android.widget.TextView;

public class MainGame extends Activity {
@SuppressLint("NewAPI")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);
    //retrives player1's name
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    TextView name1 = (TextView) findViewById(R.id.name1);
    name1.setText(message);
    //retrivews player2's name
    Intent intent2 = getIntent();
    String message2 = intent2.getStringExtra(MainActivity.EXTRA_MESSAGE);
    TextView name2 = (TextView) findViewById(R.id.name2);
    name2.setText(message2);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

}

       return super.onOptionsItemSelected(item);
}

}

当我运行这个时,我得到了在两个 TextViews 中为 'name2' 放入的任何内容.我需要做什么来改变这种情况?

When I run this, I get whatever has been put in for 'name2' in both TextViews. What do I need to do to change this?

推荐答案

当我运行它时,我得到了在两个 TextView 中为 'name2' 放入的任何内容

when i run this i get whatever has been put in for 'name2' in both TextView's

这是因为您正在使用第二个 Intent 创建 Activity 的新实例.你可以用不同的方法来做到这一点.一个是创建一个 Intent 作为成员变量,在你的第一个函数调用中实例化它,添加额外的,然后在第二个方法中添加另一个额外的,并调用 startActivity那里.

This is because you are creating a new instance of the Activity with the second Intent. There are different ways you could do it. One would be create a single Intent as a member variable, instantiate it in your first function call, add extras, then add the other extra in the second method, and call startActivity there.

但同时进行所有操作可能会更容易且更具可读性.

But it would probably be easier and more readable to just do it all at the same time.

 public void sendNames() {
    //sends player1's name to mainGame
    Intent intent = new Intent (this, MainGame.class);
    EditText player1 = (EditText) findViewById(R.id.player1);
    String player1Name= player1.getText().toString();
    intent.putExtra("player1Name", player1Name);
    EditText player2 = (EditText) findViewById(R.id.player2);
    String player2Name= player2.getText().toString();
    intent2.putExtra("player2Name", player2Name);
    startActivity(intent);

就调用这个方法.

然后用

Intent intent = getIntent();
String name1 = intent.getStringExtra("player1Name");
TextView name1 = (TextView) findViewById(R.id.name1);
name1.setText(message);

String name1 = intent2.getStringExtra("player2Name");
TextView name2 = (TextView) findViewById(R.id.name2);
name2.setText(name1 ;

这篇关于将多个意图从一个活动发送到另一个活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆