Несколько onActivityResult {} в одном классе? - PullRequest
2 голосов
/ 07 декабря 2011

Я делаю несколько сборщиков диалогов в моем приложении и использую коммутатор на моем onClickListener, но диалоги требуют onActivityResult{}, но приложение падает, если я добавляю 2 ... Могу ли я поместить их обоих в том же onActivityResult{} вызывая каждый по кодам результатов? Код ниже:

@Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        switch(arg0.getId()){
            case R.id.bContacts:

                Intent i = new Intent(Intent.ACTION_PICK, 
                        ContactsContract.Contacts.CONTENT_URI); 
                        startActivityForResult(i, PICK_CONTACT); 

                break;  

            case R.id.bRingtone:

                String uri = null;
                Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
                startActivityForResult( intent, Set_Ringtone);

                break;
        }
    }

 @Override 
        protected void onActivityResult(int requestCode, int resultCode, Intent 
    data) 
        { 
         super.onActivityResult(requestCode, resultCode, data); 
            Cursor c = getContact(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);

            if (c.moveToNext()) {
                String name = c
                        .getString(c
                                .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                callName.setText(name);
                String phoneNumber = c
                        .getString(c
                                .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
                callNum.setText(phoneNumber);
                Log.d("Cont", "name "+name+" no. " + phoneNumber);
            } 
        } 


  @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent)
    {
        if (resultCode == Activity.RESULT_OK && requestCode == 5)
        {
             Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);

             if (uri != null)
             {

                 String ringTonePath = uri.toString();
                 Toast.makeText(this, "GOT IT" + ringTonePath, Toast.LENGTH_LONG).show();
             }
             else
             {
                 Toast.makeText(this, "DIDNT", Toast.LENGTH_SHORT).show();
             }
         }            
     }

1 Ответ

7 голосов
/ 07 декабря 2011

Вы можете обрабатывать оба намерения одним и тем же onActivityResult() методом.Вот почему вы отправляете код запроса со своим намерением, когда звоните startActivityForResult(), вы получаете его обратно, когда приходит результат для дифференциации.Ваш метод может выглядеть следующим образом:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    switch(requestCode) {
        case PICK_CONTACT:
           // handle the contact result
        break;

        case Set_Ringtone:
           // handle the ringtone result
        break;
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...