2015-02-10 2 views
0
@Override 
    public void onActivityResult(int reqCode, int resultCode, **Intent data**){ 
     super.onActivityResult(reqCode, resultCode, **data**); 

     switch (reqCode) { 
      case (PICK_CONTACT) : 
       if (resultCode == Activity.RESULT_OK) { 

        Uri contactData = **data**.getData(); 
        Cursor c = getContentResolver().query(**contactData**, null, null, null, null); 
        if (c.moveToFirst()) { 
         String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
         // TODO Whatever you want to do with the selected contact name. 
         //ImageView imageView = (ImageView)findViewById(R.id.imageView); 
         //Picasso.with(this).load("https://cms-assets.tutsplus.com/uploads/users/21/posts/19431/featured_image/CodeFeature.jpg").into(imageView); 
         FragmentManager FM = getFragmentManager(); 
         FragmentTransaction FT = FM.beginTransaction(); 
         FragmentActivity F1 = new FragmentActivity(); 



         FT.add(R.id.frame_layout, F1); 
         FT.commit(); 

        } 
       } 
       break; 
     } 

    } 

Может кто-нибудь объяснить, как переменная data в аргументе onActivityResult используется, чтобы этот код работал?Как задание, переданное из аргумента onActivityResult, работает с моим приложением?

Я вижу, что переменная используется для вызова getData(), но я смущен относительно того, как эта переменная связана с Intent вне этого метода. Кроме того, что именно вызывает data.getData()?

В основном я пытаюсь понять этот фрагмент кода

public void onActivityResult(int reqCode, int resultCode, Intent data){ 
     super.onActivityResult(reqCode, resultCode, data); 

     switch (reqCode) { 
      case (PICK_CONTACT) : 
       if (resultCode == Activity.RESULT_OK) { 

        Uri contactData = data.getData(); 
        Cursor c = getContentResolver().query(contactData, null, null, null, null); 

Может кто-нибудь помочь мне разобраться в этом?

ответ

1

переменных данных является Намерение, что вы указали в завершающем деятельности. Когда вы хотите закончить действие, которое вы вызвали с помощью startActivityForResult(), вы должны вызвать setResult().

В качестве первого параметра вы должны установить код результата (RESULT_OK, RESULT_CANCELED, ...). Вы также можете добавить второй, который должен быть намерением, и который будет содержать информацию, которую вы хотите получить, в onActivityResult(). И это переменная данных в onActivityResult().

Если вы хотите узнать больше о getData(), вы можете проверить это: http://developer.android.com/reference/android/content/Intent.html#getData()

1

Посмотрите здесь: Click me and than the first answer

На ссылке вы можете увидеть, что вы можете дать Intent data сверток или дополнительные услуги, которые вы получаете с методом GetData().

1

Давайте предположим, что вызываемая активность (начата startActivityForResult()) устанавливает результат до окончания следующим образом:

Intent data = new Intent(); 
data.putExtra ("aValue", 42); 
getActivity().setResult(Activity.RESULT_OK, data); 
finish(); 

Для того, чтобы получить значение в вызывающую активности, используйте

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

    switch (requestCode) { 
     case (PICK_CONTACT) : 
      if (resultCode == Activity.RESULT_OK) { 
       int aValue = data.getIntExtra("aValue", -1); 
      .... 
    } 
} 

Этот пример основан на int, однако есть много других типов значений, которые могут быть переданы. См. Документацию Androids Intent.

p.s.: позвольте мне добавить, что она работает так же, как с void Intent.setData(Uri) и Uri Intent.getData() вместо putExtra(...) и getExtra(...)

+0

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

Смежные вопросы