2011-12-07 29 views
2

我在我的应用程序上做了几个对话框选择器,并在我的onClickListener上使用开关盒,但对话框要求输入onActivityResult{},但如果我添加了2,则应用程序崩溃了...我可以将它们放在相同的onActivityResult{}呼叫中每个结果代码?代码如下:在同一个类中有多个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(); 
      } 
     }    
    } 

回答

7

您可以在同一个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; 
    } 
} 

您的应用程序很可能崩溃,因为你尝试,如果你选择了错误的意图(未提供结果的细节工作例如,你在这里尝试读取联系人姓名,铃声结果将不起作用)

+1

就是这样。我的开关情况之前没有工作...因为我在2个OnActivityReuslts意图进行变化: 保护无效onActivityResult(最终诠释requestCode,最终诠释发送resultCode,最终意向意图) 保护无效onActivityResult(最终诠释requestCode,最终int resultCode,最终意图数据) 所以当SET_RINGTONE被调用意图没有解决。 YOu的答案帮助我看到了光芒! – user961389

相关问题