2017-04-11 62 views
0

我嘗試用ChooseActivity向MainActivity中額外的字符串傳播一個intent。在MainActivity中,調用onActivityResult來獲取字符串,但得到一個空值。爲什麼它不能得到字符串?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

你得到一個空,因爲意圖名意圖和數據是不同的。您將數據添加到Itent名稱數據,但是您以Itent名稱的意圖啓動MainActivity

0

請致電finish()結束ChooseActivitysetResult()