2017-01-05 3 views
-1

ich eine Aktivität haben, wo ich zwei onActvityResultsjava, android: onActivityResult mit unterschiedlichen Parametern in einer Aktivität

eine für die CalendarView:

@Override 
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) 

eine für das Abrufen von Veranstaltungen in Google Kalender:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 

Wie habe ich diese beiden in einer Aktivität? Vielen Dank!

+0

einfach überprüfen Sie den Wert requestCode innerhalb des onActivityResult Methode und Sie sind gut zu gehen. Der Anforderungscode kann für die beiden Aktivitäten zum Zeitpunkt des Aufrufs unter Verwendung der Absicht –

+0

für die Aktivität, die 'setResult() aufruft, unterschiedlich festgelegt werden. finish(); 'ist es egal, wie der Name des Intent-Parameters lautet –

Antwort

0

Sie nicht. Sie haben nur einen, aber sie sollten unterschiedliche Codes haben. So können Sie unterscheiden, ob das Ergebnis aus der Kalenderansicht oder Google Kalender oder etwas anderem stammt.

3

Es scheint, Sie haben das Konzept nicht richtig verstanden! Dies könnte Ihnen helfen, onActivityResult zu verstehen.

von startActivityForResult(Intent intent, int requestCode) verwenden, können Sie eine andere Aktivität beginnen und dann erhalten ein Ergebnis aus dieser Tätigkeit in der onActivityResult() method.So onActivityResult() ist, von wo Sie die andere Aktivität starten.

onActivityResult(int requestCode, int resultCode, Intent data) Überprüfen Sie die Parameter hier. Anforderungscode ist dort zu filtern, von wo Sie das Ergebnis erhalten haben. So können Sie verschiedene Daten mit ihren requestCodes identifizieren!

Beispiel

public class MainActivity extends Activity { 

     // Use a unique request code for each use case 
     private static final int REQUEST_CODE_EXAMPLE = 0x9988; 

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

      // Create an Intent to start AnotherActivity 
      final Intent intent = new Intent(this, AnotherActivity.class); 

      // Start AnotherActivity with the request code 
      startActivityForResult(intent, REQUEST_CODE_EXAMPLE); 
     } 

     //-------- When a result is returned from another Activity onActivityResult is called.--------- // 
     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 

      // First we need to check if the requestCode matches the one we used. 
      if(requestCode == REQUEST_CODE_EXAMPLE) { 

       // The resultCode is set by the AnotherActivity 
       // By convention RESULT_OK means that what ever 
       // AnotherActivity did was successful 
       if(resultCode == Activity.RESULT_OK) { 
        // Get the result from the returned Intent 
        final String result = data.getStringExtra(AnotherActivity.EXTRA_DATA); 

        // Use the data - in this case, display it in a Toast. 
        Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show(); 
       } else { 
        // AnotherActivity was not successful. No data to retrieve. 
       } 
      } 
     } 
    } 

AnotherActivity < - Dies ist die diejenige, die wir Daten zu senden verwenden, um MainActivity

public class AnotherActivity extends Activity { 

     // Constant used to identify data sent between Activities. 
     public static final String EXTRA_DATA = "EXTRA_DATA"; 

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

      final View button = findViewById(R.id.button); 
      // When this button is clicked we want to return a result 
      button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // Create a new Intent as container for the result 
        final Intent data = new Intent(); 

        // Add the required data to be returned to the MainActivity 
        data.putExtra(EXTRA_DATA, "Some interesting data!"); 

        // Set the resultCode to Activity.RESULT_OK to 
        // indicate a success and attach the Intent 
        // which contains our result data 
        setResult(Activity.RESULT_OK, data); 

        // With finish() we close the AnotherActivity to 
        // return to MainActivity 
        finish(); 
       } 
      }); 
     } 

     @Override 
     public void onBackPressed() { 
      // When the user hits the back button set the resultCode 
      // to Activity.RESULT_CANCELED to indicate a failure 
      setResult(Activity.RESULT_CANCELED); 
      super.onBackPressed(); 
     } 
    } 

Hinweis: Jetzt in MainActivity überprüfen Sie startActivityForResult dort geben Sie einen REQUEST_CODE . Nehmen wir an, Sie möchten drei verschiedene Aktivitäten aufrufen, um Ergebnisse zu erhalten. Es gibt also drei startActivityForResult Anrufe mit drei verschiedenen REQUEST_CODE. REQUEST_CODE ist nichts anderes als ein eindeutiger Schlüssel, den Sie in Ihrer Aktivität angeben, um Ihre startActivityForResult-Aufrufe eindeutig zu identifizieren.

Sobald Sie Daten von diesen Aktivitäten erhalten können Sie überprüfen, was ist der REQUEST_CODE, dann wissen Sie, ah ha dieses Ergebnis ist von dieser Aktivität.

Es ist so, als würdest du E-Mails an deine Geliebten mit einem farbenfrohen Cover verschicken und sie bitten, in den gleichen Umschlägen zu antworten. Wenn du dann einen Brief von ihnen zurückbekommst, weißt du, wer das für dich geschickt hat. awww;)

0

Sie könnten den requestCode Parameter der onActivityResult Methode verwenden. Rufen Sie die Methode startActivityForResult für das Szenario mit unterschiedlichen Anforderungscodes auf.

z.

private static int CALENDAR_VIEW_CALL = 1; 
private static int CALENDAR_EVENTS_CALL = 2; 

... 

startActivityForResult(intent1, CALENDAR_VIEW_CALL); 

... 

startActivityForResult(intent1, CALENDAR_EVENTS_CALL); 

Jetzt in Ihrem onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CALENDAR_VIEW_CALL) { 
     //do the callback work for calendar view 
    } 
    else if (requestCode == CALENDAR_EVENTS_CALL) { 
     //do the callback work after retrieving the events 
    } 
} 
0

Aber Sie haben keine Methoden mit unterschiedlichen Parametern haben Sie die gleiche Methode, mit den gleichen Parametern, nur der Name der Parameter unterschiedlich ist, und das kannst du nicht in Java machen, weil die Sprache nicht wirklich weiß, welche Methode welche ist.

Sie sollten die anderen Antworten folgen und überprüfen Sie die requestCode

Verwandte Themen