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

j2qf4p5b  于 2022-12-25  发布在  Android
关注(0)|答案(7)|浏览(146)

我想把两个值传递给另一个活动,我可以用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"});

看起来很简单,但是我如何从第二个活动中的数组中提取值,我一直在使用这个方法来获取单个值。

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

我想我必须把ID_EXTRA转换成一个数组???

yxyvkwin

yxyvkwin1#

如果您愿意,您可以传递一组额外内容,而不是单个额外内容,例如:

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

dzhpxtsq2#

可以使用多个键传递多个值。

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

gwbalxhn3#

在类中放置额外的值

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

tyg4sfes4#

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

kmpatx3s5#

不,你不能,但你可以传递一个数组使用:

public Intent putExtra (String name, String[] value)

比如说

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

w8rqjzmb6#

您的示例将无法工作,因为ExtrasKeyValue组成。您不能将多个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);
swvgeqrz

swvgeqrz7#

对于单个的少量值来说,putExtra是完美的,但是当你传递多个值并且需要传递自定义的ArrayList或List时,我认为这是个坏主意。解决方案是你可以使用**Parcelable。你也可以使用SingletonSerializable**。

可打包:

需要共享的可打包类。

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

相关问题