Android,我可以使用putExtra传递多个值

时间:2011-12-09 22:31:30

标签: android parameters

我想将两个值传递给另一个活动我可以使用putExtra执行此操作,还是必须以更复杂的方式执行此操作,这在我的阅读中看起来如此。例如,这样的工作可以吗?

public final static String ID_EXTRA="com.fnesse.beachguide._ID";

Intent i = new Intent(this, CoastList.class);
i.putExtra(ID_EXTRA, "1", "111");
startActivity(i);

上面给出了错误。

修改

我尝试的第一件事情类似于:

i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");

但ID_EXTRA2似乎写了ID_EXTRA1

所以,

i.putExtra(ID_EXTRA, new String[] { "1", "111"});

看起来像go,但如何在第二个活动中从数组中提取值,我一直在使用它作为单个值。

passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA);

我想我必须以某种方式将ID_EXTRA变成一个数组???

7 个答案:

答案 0 :(得分:136)

如果您愿意,可以传递额外内容的“捆绑”而不是单独的附加内容,例如: -

Intent intent = new Intent(this, MyActivity.class);
Bundle extras = new Bundle();
extras.putString("EXTRA_USERNAME","my_username");
extras.putString("EXTRA_PASSWORD","my_password");
intent.putExtras(extras);
startActivity(intent);

然后在你的Activity中你的触发,你可以这样引用: -

Intent intent = getIntent();
Bundle extras = intent.getExtras();
String username_string = extras.getString("EXTRA_USERNAME");
String password_string = extras.getString("EXTRA_PASSWORD");

或(如果您愿意): -

Bundle extras = getIntent().getExtras();
String username_string = extras.getString("EXTRA_USERNAME");
String password_string = extras.getString("EXTRA_PASSWORD");

希望这有帮助! : - )

答案 1 :(得分:23)

您可以使用多个键传递多个值。而不是

i.putExtra(ID_EXTRA, "1", "111");

i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");

当然,您必须为键定义2个常量,并且必须在新活动中单独读取。

或者您可以通过

传递字符串数组
i.putExtra(ID_EXTRA, new String[] { "1", "111"});

答案 2 :(得分:11)

在课堂上加上额外的值

public class MainActivity extends Activity {
        public final static String USERNAME = "com.example.myfirstapp.MESSAGE";
        public final static String EMAIL = "com.example.myfirstapp.EMAIL";

public void registerUser(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText userNameTxt = (EditText) findViewById(R.id.editText1);
        EditText emailTxt = (EditText) findViewById(R.id.editText2);
        String userName = userNameTxt.getText().toString();
        String email = emailTxt.getText().toString();
        intent.putExtra(USERNAME, userName);
        intent.putExtra(EMAIL,email);
        startActivity(intent);

    }

从另一个类中读取额外的值

public class DisplayMessageActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        String user = intent.getStringExtra(MainActivity.USERNAME);
        String email = intent.getStringExtra(MainActivity.EMAIL);   

答案 3 :(得分:1)

不,你不能,但你可以使用:

传递数组
public Intent putExtra (String name, String[] value)

就像这样:

i.putExtra(ID_EXTRA, new String[]{"1", "111"});

答案 4 :(得分:1)

您的示例无法使用,因为Extras是由KeyValue组成的。您不能将多个KeysValues放在一个Extra

此外,据我所知(并注意到),你的密钥必须是Strings,但我可能错了。

试试这个:

public final static String ID_EXTRA="com.fnesse.beachguide._ID";

Intent i = new Intent(this, CoastList.class);
i.putExtra("ID_Extra", ID_EXTRA);
i.putExtra("1", 111);
startActivity(i);

答案 5 :(得分:0)

对于单个少量的值 putExtra 是完美的,但是当您传递多个值并需要传递自定义 ArrayList或List 时,我认为它很糟糕理念。解决方案是您可以使用 Parcelable 。您也可以使用 Singleton Serializable

Parcelable:

  

您需要分享的Parcelable类。

 public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }
  

在您要发送的地方构建您的活动

MyParcelable example = new MyParcelable();
.....
.....
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));
  

来自您想要接收的其他活动

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));

答案 6 :(得分:0)

为 kotlin 编码人员传递额外的

val intent = Intent(this, MyActivity::class.java)
val extras = Bundle().apply {
    putString("EXTRA_USERNAME", "my_username")
    putString("EXTRA_PASSWORD", "my_password")
}
intent.putExtras(extras)
startActivity(intent)

然后在其他活动中检索您的值,如下所示:

val extras = getIntent().extras
val username_string = extras?.getString("EXTRA_USERNAME")
val password_string = extras?.getString("EXTRA_PASSWORD")