альтернатива finish () - PullRequest
       31

альтернатива finish ()

0 голосов
/ 08 ноября 2011

Я прочитал в документации, что следует избегать использования finish () - но я не вижу лучшей альтернативы для этого ...

Мне просто хотелось бы знать, есть ли лучший, более чистый способ сделать это ...

Большое спасибо

Это то, что мне в основном нужно сделать:

MainActivity 
   -> Sub1Activity
      -> MySMSActivity
         -> send SMS
         -> handle if SMS was sent or not
            <- finish()
      <- finish()
(skip Sub1Activity)
MainActivity

Код в MainActivity:

this.myBtn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        doSub1Activity("xyz"); 
    }
});

public void doSub1Activity() {
    Intent i;
    i = new Intent(this, SUB1_screen.class);
    startActivity(i);
}

Код в Sub1Activity:

this.myBtn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
       doMySMSActivity("xxx"); 
       finish();         //<- this is the 1. call to "finish" I am concerned about
    }
public void doMySMSActivity() {
    Intent i;
    i = new Intent(this, MySMSActivity.class);
    startActivity(i);
    }

Код в MySMSActivity:

private void sendSMS(String phoneNumber, String message)
    {        
        String SENT = "SMS_SENT";
        String DELIVERED = "SMS_DELIVERED";

        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
                new Intent(SENT), 0);

        //---when the SMS has been sent---
        bRSMS_has_been_sent = new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {

                switch (getResultCode())
                {
                case Activity.RESULT_OK:
                    ...
                    break;
                default: 
                    break;
                }
                finish();  // another call to finish so the user continues with
                                       // MainActivity after SMS has been sent...
            }
        }; 

        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);        
    }

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Вам не нужно звонить finish() несколько раз. Если вам нужно вернуться к основному занятию, просто запустите его, используя намерения с флагами ниже Это будет повторно использовать действие, если оно уже существует.

Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP

0 голосов
/ 08 ноября 2011

Почему вы отправляете смс-рассылку для себя?Он не взаимодействует с пользователем - просто выложите свое ожидающее намерение из Sub1Activity

...