3

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

到目前为止,这是我的 MainActivity 代码:

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 的代码:

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

}

当我运行它时,我得到了在两个 TextView 中为“name2”输入的任何内容。我需要做什么来改变这个?

4

3 回答 3

4

当我运行这个时,我得到了在两个 TextView 中为“name2”输入的任何内容

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

但是同时做这一切可能会更容易,更易读。

 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 ;
于 2013-08-12T20:11:56.257 回答
0

Intent 类似于 Map,您可以在其中存储带有键的字符串(和其他可序列化对象)。在您的代码中,您使用相同的密钥EXTRA_MESSAGE两次。

另外,请记住,您使用一个 Intent 来启动一个 Activity:您不能有 2 个 Intent 来启动一个 Activity 实例。解决方案是将具有 2 个不同键的 2 个值放在一个 Intent 中。

于 2013-08-12T20:14:22.290 回答
0

您可以使用意图将多个参数发送到一个活动,您不必为此创建两个不同的意图。

您可以按以下方式执行此操作

public void sendNames() {
    Intent intent = new Intent (this, MainGame.class);
    EditText player1 = (EditText) findViewById(R.id.player1);
    EditText player2 = (EditText) findViewById(R.id.player2);
    String message = player1.getText().toString();
    String message2 = player2.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    intent2.putExtra(EXTRA_MESSAGE1, message2);
    startActivity(intent);
}

然后得到这些值

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
String message2 = intent2.getStringExtra(MainActivity.EXTRA_MESSAGE1);
TextView name1 = (TextView) findViewById(R.id.name1);
name1.setText(message);
TextView name2 = (TextView) findViewById(R.id.name2);
name2.setText(message2);
于 2013-08-12T20:15:16.417 回答