2017-04-11 3 views
0

私は、ChooseActivityからMainActivityへの余分な文字列でインテントを伝播しようとします。 MainActivityでは、onActivityResultを呼び出して文字列を取得しますが、nullを取得します。なぜそれは文字列を取得できませんか?onActivityResult()はsetResult()からインテントを返さない

public class MainActivity extends AppCompatActivity { 
    private static final int REQUEST_CODE_CHOOSE = 1; 

    private Button mButtonStart; 
    private Button mButtonGuess; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mButtonStart = (Button)findViewById(R.id.button_start); 
     mButtonStart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(MainActivity.this, ChooseActivity.class); 
       **startActivityForResult**(intent, REQUEST_CODE_CHOOSE); 
      } 
     }); 

     mButtonGuess = (Button)findViewById(R.id.button_guess); 
     mButtonGuess.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mButtonGuess.setText(buttonName); 

      } 
     }); 
    } 

    private String buttonName; 

    @Override 
    protected void **onActivityResult**(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     buttonName = ChooseActivity.getExtraChoose(data); 

    } 
} 

ChooseActivityクラス:

public class ChooseActivity extends AppCompatActivity { 
    private static final String EXTRA_CHOOSE = "com.robyn.guessapp.choose"; 
    private Button mButtonA; 
    private Button mButtonBack; 

     private String mButtonName; 

     public static String getExtraChoose(Intent data) { 
     return data.getStringExtra(EXTRA_CHOOSE); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_choose); 

     mButtonA = (Button)findViewById(R.id.button_a); 
     mButtonA.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mButtonName = mButtonA.getText().toString(); 
       setChooseResult(mButtonName); 
      } 
     }); 

     mButtonBack = (Button)findViewById(R.id.button_back); 
     mButtonBack.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(ChooseActivity.this, MainActivity.class); 
       startActivity(intent); 
      } 
     }); 

    } 

    private void setChooseResult(String buttonName) { 
     Intent data = new Intent(); 
     data.putExtra(EXTRA_CHOOSE, buttonName); 
     **setResult**(**RESULT_OK**, data); 
    } 
} 

答えて

0

あなたは活動の間で値を渡すために静的変数を使用しないでください。

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // this is how you get a string back from the called activity 
     String s = data.getStringExtra("myKey"); 
    } 
} 
public class ChooseActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mButtonBack.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // create an intent and put values in it 
       Intent intent = new Intent(); 
       intent.putExtra("myKey", "myString"); 

       // this intent will be passed back 
       // to the caller activity 
       setResult(RESULT_OK, intent); 

       // don't start the caller activity, 
       // but call finish instead 
       finish(); 
      } 
     }); 
    } 
} 
0

テント名の意図とデータが異なっているので、あなたがnullを取得します:

は、これらの変更を適用します。データをItentの名前データに置きますが、Itentの名前の目的でMainActivityを開始します

0

を終了するには、setResult()の直後にChooseActivityを呼び出します。

関連する問題