【问题标题】:Pass strings to another Activity in Android将字符串传递给 Android 中的另一个 Activity
【发布时间】:2015-11-05 07:46:10
【问题描述】:

也许有人可以帮助我。我想将两个字符串传递给另一个活动。这是我生成字符串的代码:

private void contactPicked(Intent data) {
    Cursor cursor = null;
    try {
        String phoneNo = null;
        String name = null;

        // getData() method will have the Content Uri of the selected contact
        Uri uri = data.getData();

        //Query the content uri
        cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        // column index of the phone number
        int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
        // column index of the contact name
        int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
        phoneNo = cursor.getString(phoneIndex);
        name = cursor.getString(nameIndex);
        // Set the value to the textviews
        textView1.setText(name);
        textView2.setText(phoneNo);
    } catch (Exception e) {
        e.printStackTrace();
    }

我想将 phoneNo 和 Name 传递给我的 MainActivity

我尝试做一个 SharedPreference 并在我的 MainAcitivity 中加载 DefaultSharedPreference 而没有任何结果

【问题讨论】:

标签: android string


【解决方案1】:

在你的代码中添加这个

Intent intent = new Intent(activity1.this, activity2.class);
intent.putExtra("key", keyId);
startActivity(intent);

并从第二个活动中获取它

Bundle extras = getIntent().getExtras();
String value;
if (extras != null) {
 value = extras.getString("key");
}

【讨论】:

  • 我所做的是:我从 MainActivity 转到 ContactActivity(这就是字符串所在的位置),在那里我选择了一个联系人。当我在我的 ContactActivity 中执行 startActivity(intent) 时,程序会再次打开 MainActivity。
【解决方案2】:

在当前活动中添加:

Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("PHONE", phoneNo);
intent.putExtra("NAME", Name);
startActivity(intent);

在主要活动中添加:

Intent intent = getIntent();
String phonNo = intent.getStringExtra("PHONE");
String Name = intent.getStringExtra("Name");

【讨论】:

  • 我所做的是:我从 MainActivity 转到 ContactActivity(这就是字符串所在的位置),在那里我选择了一个联系人。当我在我的 ContactActivity 中执行 startActivity(intent) 时,程序会再次打开 MainActivity。
【解决方案3】:

你可以使用 Intent

// 通过 Intent 将数据从一个活动传递到另一个活动

Intent intent = new Intent(getApplicationContext(),MainActivity.class);
intent.putExtra("phone", phoneNo);
intent.putExtra("name", name);
startActivity(intent);

//在其他activity中接收数据

Intent intent = getIntent();
String phonNo = intent.getStringExtra("phone");
String name = intent.getStringExtra("name");

【讨论】:

  • 我所做的是:我从 MainActivity 转到 ContactActivity(这就是字符串所在的位置),在那里我选择了一个联系人。当我在 ContactActivity 中执行 startActivity(intent) 时,程序会再次打开 MainActivity。
  • 那有什么问题?
  • 它不应该打开 MainActivity 吗?我只想将 phoneNo 和 name 保存在某处,以便我可以在 MainAcitivity 中读取它们,而不是在我的 ContactActivity 中加载联系人时交换活动??
  • 您到底想做什么?您想将数据存储在某处但不重定向到 MainActivity?,当您下次访问 MainActivity 时应该可以获取数据?
【解决方案4】:

从您的 cmets 中猜测,一旦您关闭 ContactActivity 而不再次打开 MainActivity(不将其添加到堆栈中),您想要传递字符串。

您可以启动一个 Activity 并等待结果,因此在您的 Main Activity 中进行更改

   startActivity(intent);

   startActivityForResult(i, REQUEST_CODE);  

然后,在您的 ContactActivity 中,您可以将结果设置如下:

   intent = new Intent();
   intent.putExtra("PHONE", phoneNo);
   intent.putExtra("NAME", Name);
   setResult(RESULT_OK, intent);

在 onActivityResult 中你可以实现 onActivityResult 来检索数据

   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
       if(requestCode == REQUEST_CODE){

            if(resultcode == RESULT_OK){
                 String phoneNo = data.getStringExtra("PHONE");
                 String name = data.getStringExtra("NAME");
                 //do whatever you want
            }else{
                 //do something else
            }
       }
   } 

【讨论】:

  • 所以在 ContactActivity 我做:'Intent intent = new Intent(getApplicationContext(),MainActivity.class); intent.putExtra("PHONE", phoneNo); intent.putExtra("NAME", name); startActivityForResult(i, REQUEST_CODE);'在 MainActivity 我调用 onActivityResult?
  • 在 ContactActivity 中,您使用我发布的意图。不需要设置 MainActivity.class。一旦 ContactActivity 被解除, setResult 将返回带有额外内容的意图到 MainActivity。而且你不必调用onActivityResult,只需实现它。它会在收到结果时调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多