Child pages
  • Widget újrahasznosításának problémája
Skip to end of metadata
Go to start of metadata

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. 

      
      
Page viewed times
  • No labels

2 Comments

  1. 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? (smile)

    Ú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.

    1. Köszönöm, ez a megoldás!!!