2017-04-11 2 views
0

Ich versuche, eine Absicht mit einer Zeichenfolge extra von ChooseActivity zu MainActivity zurück zu propagieren. Rufen Sie in MainActivity onActivityResult auf, um die Zeichenfolge abzurufen, erhalten Sie jedoch eine Null. Warum kann es die Schnur nicht bekommen?onActivityResult() erhält keine Absicht zurück von 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); 

    } 
} 

die ChooseActivity Klasse:

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

Antwort

0

Sie sollten nicht auf eine statische Variable auf Werte zwischen Aktivitäten verwenden.

diese Änderungen übernehmen:

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

Sie einen null, weil Intent Name Vorsatz und Daten unterscheiden. Sie geben Daten in den Namen des Datentitelnamens ein, aber Sie starten MainActivity mit dem Intentnamen Intent

0

Rufen Sie finish() an, um ChooseActivity direkt nach setResult() zu beenden.

Verwandte Themen