Sziasztok,
android alkalmazást írogatok, a kódnak csak egy részét írom én. Van egy kész TimeWidget-em, ami felugró ablakban időpont (óra és perc) megadását szolgáltatja:
public class TimeWidget extends Activity {
// fields
public static final int SELECT_TIME_REQUEST = 112;
private boolean bNoneButton = true;
private boolean b24HourMode = false;
private int iHour = -1;
private int iMinutes = -1;
...
Majd az Openjét fogom meghívni amikor ki akarom rakni a képernyőre:
public static void Open( Activity parentActivity, boolean bNoneButton, boolean b24HourMode, int iHour, int iMinute ) {
Intent it = new Intent( "android.intent.action.AnCal.ACTION_MODE_EDIT_SELECT_TIME" );
Bundle data = new Bundle();
data.putInt( "Hour", iHour );
data.putInt( "Minute", iMinute );
data.putBoolean( "24HourMode", b24HourMode );
data.putBoolean( "noneButton", bNoneButton );
it.putExtras( data );
parentActivity.startActivityForResult( it, SELECT_TIME_REQUEST );
}
Ezek pedig kívülről az időértékek kiolvasását végzik:
public static int GetSelectedTimeHourOnActivityResult( int requestCode, int resultCode, Bundle extras ) {
if( ( requestCode == TimeWidget.SELECT_TIME_REQUEST ) && ( resultCode == RESULT_OK ) )
if( extras.containsKey( "Hour" ) )
return extras.getInt( "Hour" );
return -1;
}
public static int GetSelectedTimeMinuteOnActivityResult( int requestCode, int resultCode, Bundle extras ) {
if( ( requestCode == TimeWidget.SELECT_TIME_REQUEST ) && ( resultCode == RESULT_OK ) )
if( extras.containsKey( "Minute" ) )
return extras.getInt( "Minute" );
return -1;
}
public void OnClose() {
Bundle data = new Bundle();
data.putInt( "Hour", iHour ); // iHour és iMinutes ekkor már tartalmazzák a beállított értékeket
data.putInt( "Minute", iMinutes );
Intent intentData = new Intent( "" );
intentData.putExtras( data );
setResult( RESULT_OK, intentData );
this.finish();
}
}
A hívó activity-ből KETTŐ helyen szeretném ezt meghívni, de csak egyet tudok:
hívás gomb1 nyomására:
public void button1_onClick( View v ) {
TimeWidget.Open( aktuálisActivity.this, false, prefs.b24HourMode,
aktuálisÓra, aktuálisPerc );
}
és ahol elkapom a resultot:
protected void onActivityResult( int requestCode, int resultCode, Intent data ) {
super.onActivityResult( requestCode, resultCode, data );
Bundle extras = CommonActivity.getIntentExtras( data );
if( extras != null ) {
// check for time widget edit request code
if( ( requestCode == TimeWidget.SELECT_TIME_REQUEST ) && ( resultCode == RESULT_OK ) ) {
final int iHour = TimeWidget.GetSelectedTimeHourOnActivityResult( requestCode, resultCode, extras );
final int iMinute = TimeWidget.GetSelectedTimeMinuteOnActivityResult( requestCode, resultCode, extras );
...
return;
}
}
A kérdésem az, hogy mit kell tennem ahhoz, hogy egy gomb2 lenyomásával is feljöjjön a TimeWidget és el tudjam kapni a visszaadott resultokat? Azt nem látom, hogy mi alapján tudom elválasztani a két gomb clickje után a visszatérést, mert a TimeWidget nyilván RESULT_OK-ot ad amikor bezár.
2 Comments
Auth Gábor
A második gomb megnyomásakor feljön a TimeWidget? Ha igen, akkor a kérdés első része nem kérdés, ugye?
Úgy tudod eldönteni, hogy melyikből indult, hogy az open esetén átadot az Intent-ben a gomb azonosítóját, és visszatéréskor visszaküldöd, így tudsz rá elágazást írni.
Franz Max
Köszönöm, ez a megoldás!!!