文字列データにputExtra()およびgetExtra()を使用する方法


318

誰かが私に正確にどのように使用するかgetExtra()、そしてputExtra()インテントを教えてくれますか?実際、文字列データを格納する文字列変数、たとえばstrがあります。次に、このデータを1つのアクティビティから別のアクティビティに送信します。

  Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
  String keyIdentifer  = null;
  i.putExtra(strName, keyIdentifer );

そしてSecondScreen.javaで

 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
        TextView userName = (TextView)findViewById(R.id.userName);
        Bundle bundle = getIntent().getExtras();

        if(bundle.getString("strName")!= null)
        {
            //TODO here get the string stored in the string variable and do 
            // setText() on userName 
        }

    }

非常に基本的な質問だと思いますが、残念ながらここで行き詰まっています。助けてください。

おかげで、

編集:ここで、ある画面から別の画面に渡そうとしている文字列は動的です。つまり、ユーザーが入力した文字列を取得するeditTextがあります。次に、の助けを借りてmyEditText.getText().toString()。入力した値を文字列として取得しているので、このデータを渡す必要があります。


i.putExtra(strName、keyIdentifer); bundle.getString( "strName")に "strName"文字列がある間、このステートメントにはstrName変数があります。そのintent.putExtra(key、value)およびintent.getExtras()。getString(key); putとgetで同じキーを使用していることを確認してください。
15

回答:


416

これを使用してファイルを「配置」します...

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra("STRING_I_NEED", strName);

次に、値を取得するには次のようにします。

String newString;
if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        newString= null;
    } else {
        newString= extras.getString("STRING_I_NEED");
    }
} else {
    newString= (String) savedInstanceState.getSerializable("STRING_I_NEED");
}

10
「savedInstanceState ...」および「... getSerialiable」コードは、向きの変更を処理するために使用されますか?いいえの場合、そのコードは何に使用されますか?
AJW 2017年

私はandroid 3.0.1を使用しており、を使用する必要がありましたthis.getActivity().getIntent().getExtras()
タイラー

あなたがPendingIntentsを使用する場合は、「PendingIntent.FLAG_UPDATE_CURRENT」フラグを使用する必要があります。stackoverflow.com/a/29846408/2738240 テントの意図=新しいテント(コンテキスト、MainActivity.classを)。intent.putExtra( "button_id"、1); PendingIntent pendingIntent = PendingIntent.getActivity(context、0、intent、PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews views = new RemoteViews(context.getPackageName()、R.layout.my_test_widget); views.setOnClickPendingIntent(R.id.my_test_widget_button_1、pendingIntent);
Matthias Luh

69

最初のScreen.java

text=(TextView)findViewById(R.id.tv1);
edit=(EditText)findViewById(R.id.edit);
button=(Button)findViewById(R.id.bt1);

button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
        String s=edit.getText().toString();

        Intent ii=new Intent(MainActivity.this, newclass.class);
        ii.putExtra("name", s);
        startActivity(ii);
    }
});

2つ目のScreen.java

public class newclass extends Activity
{
    private TextView Textv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.intent);
        Textv = (TextView)findViewById(R.id.tv2);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {
            String j =(String) b.get("name");
            Textv.setText(j);
        }
    }
}

52

最良の方法...

SendingActivity

Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
intent.putExtra("keyName", value);  // pass your values and retrieve them in the other Activity using keyName
startActivity(intent);

RecievingActivity

 Bundle extras = intent.getExtras();
    if(extras != null)
    String data = extras.getString("keyName"); // retrieve the data using keyName 

///データを受信する最短の方法..

String data = getIntent().getExtras().getString("keyName","defaultKey");

//これにはAPI 12が必要です。// 2番目のパラメーターはオプションです。keyNameがnullの場合はdefaultkey、データとして使用します。


18

これは私が使ってきたものです。うまくいけば、誰かを助けてくれます。

データを送る

    intent = new Intent(getActivity(), CheckinActivity.class);
    intent.putExtra("mealID", meal.Meald);
    startActivity(intent);

データを取得する

    int mealId;

    Intent intent = getIntent();
    Bundle bundle = intent.getExtras();

    if(bundle != null){
        mealId = bundle.getInt("mealID");
    }

乾杯!


1
私はまだ自分自身を思い出す必要があります、時々、これがどのように正しく行われたか..笑!
SindriÞór15年

10

intentAndroid に実装するのは非常に簡単です。あるアクティビティから別のアクティビティに移動するには、2つの方法putExtra();getExtra();今、私はあなたの例を示しています。..

    Intent intent = new Intent(activity_registration.this, activity_Login.class);
                intent.putExtra("AnyKeyName", Email.getText().toString());  // pass your values and retrieve them in the other Activity using AnyKeyName
                        startActivity(intent);

今から私たちは値を取得する必要があります AnyKeyNameパラメーター以下のコードは、これを行うのに役立ちます

       String data = getIntent().getExtras().getString("AnyKeyName");
        textview.setText(data);

からの受信値Intentを必要な場所に簡単に設定できます。


6

小さな補遺:キーに独自の名前を作成する必要はありません。Androidがこれらを提供しています。f.ex。Intent.EXTRA_TEXT。受け入れられた回答の変更:

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra(Intent.EXTRA_TEXT, strName);

次に、値を取得するには次のようにします。

String newString;
Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString(Intent.EXTRA_TEXT);
}

4
Intent intent = new Intent(view.getContext(), ApplicationActivity.class);
                        intent.putExtra("int", intValue);
                        intent.putExtra("Serializable", object);
                        intent.putExtra("String", stringValue);
                        intent.putExtra("parcelable", parObject);
                        startActivity(intent);

ApplicationActivity

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

if(bundle != null){
   int mealId = bundle.getInt("int");
   Object object = bundle.getSerializable("Serializable");
   String string = bundle.getString("String");
   T string = <T>bundle.getString("parcelable");
}

4

Intentクラスで更新します。

  • hasExtra()インテントにキーに関するデータがあるかどうかを確認するために使用します。
  • 今すぐgetStringExtra()直接使用できます。

データを渡す

intent.putExtra(PutExtraConstants.USER_NAME, "user");

データを取得する

String userName;
if (getIntent().hasExtra(PutExtraConstants.USER_NAME)) {
    userName = getIntent().getStringExtra(PutExtraConstants.USER_NAME);
}

ベストプラクティスとして、常にキーを定数に配置します。

public interface PutExtraConstants {
    String USER_NAME = "USER_NAME";
}

なぜPutExtraConstantsインターフェースなのですか?
Big_Chair

@Big_ChairのでPutExtraConstantsクラスは、(定数のみが含まれpublicstaticfinal)。したがって、定数にはインターフェイスを使用することをお勧めします。
Khemraj

3

よりシンプル

送信者側

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
i.putExtra("id","string data");
startActivity(i)

受信機側

Intent i = new Intent(SourceActiviti.this,TargetActivity.class);
String strData = i.getStringExtra("id");

3

Intentオブジェクトに文字列を置く

  Intent intent = new Intent(FirstActivity.this,NextAcitivity.class);
  intent.putExtra("key",your_String);
  StartActivity(intent);

onCreateメソッドのNextAcitvityは文字列を取得します

String my_string=getIntent().getStringExtra("key");

それは簡単で短い方法です


2

送る

startActivity(new Intent(First.this, Secend.class).putExtra("key",edit.getText.tostring));

取得する

String myData = getIntent.getStringExtra("key");

1

プット機能

etname=(EditText)findViewById(R.id.Name);
        tvname=(TextView)findViewById(R.id.tvName);

        b1= (ImageButton) findViewById(R.id.Submit);

        b1.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String s=etname.getText().toString();

                Intent ii=new Intent(getApplicationContext(), MainActivity2.class);
                ii.putExtra("name", s);
                Toast.makeText(getApplicationContext(),"Page 222", Toast.LENGTH_LONG).show();
                startActivity(ii);
            }
        });



getfunction 

public class MainActivity2 extends Activity {
    TextView tvname;
    EditText etname;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        tvname = (TextView)findViewById(R.id.tvName);
        etname=(EditText)findViewById(R.id.Name);
        Intent iin= getIntent();
        Bundle b = iin.getExtras();

        if(b!=null)
        {

          String j2 =(String) b.get("name");

etname.setText(j2);
            Toast.makeText(getApplicationContext(),"ok",Toast.LENGTH_LONG).show();
        }
    }

1

データをプッシュする

import android.content.Intent;

    ...

    Intent intent = 
        new Intent( 
            this, 
            MyActivity.class );
    intent.putExtra( "paramName", "paramValue" );
    startActivity( intent );

上記のコードはメインの中にあるかもしれませんactivity。「MyActivity.class」は、2番目Activityに起動したいものです。AndroidManifest.xmlファイルに明示的に含める必要があります。

<activity android:name=".MyActivity" />

データをプル

import android.os.Bundle;

    ...

    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        String myParam = extras.getString("paramName");
    }
    else
    {
        //..oops!
    }

この例では、上記のコードはMyActivity.javaファイル内にあります。

ガチャ

このメソッドはのみを渡すことができstringsます。したがって、をに渡す必要があるとArrayListしましょうListActivity。考えられる回避策は、コンマ区切りの文字列を渡してから、反対側で分割することです。

代替ソリューション

使用する SharedPreferences


また、string.xmlから文字列を渡したい場合はどうなりますか?
HB。

1

シンプル、最初のアクティビティ-

    EditText name= (EditText) findViewById(R.id.editTextName);
    Button button= (Button) findViewById(R.id.buttonGo);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(MainActivity.this,Main2Activity.class);
            i.putExtra("name",name.getText().toString());
           startActivity(i);
          }
    });

2番目のアクティビティでは

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    TextView t = (TextView) findViewById(R.id.textView);
    Bundle bundle=getIntent().getExtras();
    String s=bundle.getString("name");
    t.setText(s);
}

必要に応じて、if / else条件を追加できます。


1

FirstScreen.javaで

    Intent intent = new Intent(FirstScreen.this, SecondScreen.class);
    String keyIdentifier = null;
    intent.putExtra(strName, keyIdentifier);

SecondScreen.java

    String keyIdentifier;
    if (savedInstanceState != null)
        keyIdentifier= (String) savedInstanceState.getSerializable(strName);
    else
        keyIdentifier = getIntent().getExtras().getString(strName);

SOへようこそ!回答を編集して、問題を解決する理由と方法を少し詳しく説明してください。詳細については、stackoverflow.com
-to

0

文字列を最初に置く

Intent secondIntent = new Intent(this, typeof(SecondActivity));
            secondIntent.PutExtra("message", "Greetings from MainActivity");

その後それを取得します

var message = this.Intent.GetStringExtra("message");

それで全部です ;)


-1

静的変数を使用してedittextの文字列を格納し、その変数を他のクラスで使用できます。これがあなたの問題を解決することを願っています


あなたはできますが、あなたはいけない:-)
ブランデル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.