如何将更新后的 phone 号码放入我为 Android 应用程序选择的字段中?

How can I put the updated phone number into the field I picked for my Android app?

如何将更新后的 phone 号码放入我选择的字段中?我让选择器返回 phone 号码,但在错误的字段中。

选择联系人后,phone 号码被放置在错误的字段中。

负责此联系人选择器逻辑的片段在我的存储库中 https://github.com/jackygrahamez/MayDay/blob/gradle2/app/src/main/java/com/mayday/md/common/ContactPickerFragment.java

我如何重构此代码以将数字放入正确的字段中?

02-23 12:47:59.217  12360-12360/com.mayday.md E/WizardActivity﹕ onUserInteraction
02-23 12:47:59.347  12360-12360/com.mayday.md E/WizardActivity﹕ onUserInteraction
02-23 12:47:59.347  12360-12360/com.mayday.md E/WizardActivity.onPause﹕ page = setup-contacts
02-23 12:47:59.347  12360-12360/com.mayday.md E/>>>>>>﹕ assert flagRiseFromPause = true
02-23 12:47:59.387  12360-12360/com.mayday.md D/AbsListView﹕ unregisterIRListener() is called
02-23 12:48:00.657  12360-12360/com.mayday.md D/WizardActivity.onStop﹕ page = setup-contacts
02-23 12:48:00.657  12360-12360/com.mayday.md D/AbsListView﹕ onVisibilityChanged() is called, visibility : 4
02-23 12:48:00.657  12360-12360/com.mayday.md D/AbsListView﹕ unregisterIRListener() is called
02-23 12:48:02.107  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult requestCode 65636
02-23 12:48:02.107  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult resultCode -1
02-23 12:48:02.107  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult data Intent { dat=content://com.android.contacts/data/2369 flg=0x1 }
02-23 12:48:02.117  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult id 2369
02-23 12:48:02.117  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult name XXX XXXX
02-23 12:48:02.147  12360-12360/com.mayday.md D/dalvikvm﹕ GC_FOR_ALLOC freed 598K, 22% free 29241K/37368K, paused 15ms, total 15ms
02-23 12:48:02.147  12360-12360/com.mayday.md E/WizardActivity﹕ onActivityResult pCur android.content.ContentResolver$CursorWrapperInner@4313d048
02-23 12:48:02.147  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult phone xxxxxxxxxx
02-23 12:48:02.147  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult phone xxxxxxxxxx
02-23 12:48:02.147  12360-12360/com.mayday.md E/ContactPickerFragment﹕ onActivityResult phoneNumberEditText android.widget.EditText{42c580b0 VFED..CL ........ 0,0-944,156 #7f0b0016 app:id/contact_edit_text}
02-23 12:48:02.147  12360-12360/com.mayday.md E/??????﹕ text changed
02-23 12:48:02.147  12360-12360/com.mayday.md D/WizardActivity.onStart﹕ page = setup-contacts
02-23 12:48:02.147  12360-12360/com.mayday.md E/WizardActivity.onResume﹕ pageId = setup-contacts and flagRiseFromPause = true
02-23 12:48:02.147  12360-12360/com.mayday.md E/WizardActivity.onResume﹕ back button pressed
02-23 12:48:02.147  12360-12360/com.mayday.md D/AbsListView﹕ onVisibilityChanged() is called, visibility : 0
02-23 12:48:02.147  12360-12360/com.mayday.md D/AbsListView﹕ unregisterIRListener() is called
02-23 12:48:02.167  12360-12360/com.mayday.md D/AbsListView﹕ unregisterIRListener() is called

NEW CLUE :我注意到请求代码 returns 不同的值取决于我选择的字段:第一个字段 requestCode 65636,第二个字段 requestCode 131172,第三个字段请求代码 196708

您当前的设置有 WizardActivity 作为父片段 activity,SetupContactsFragment 作为片段,ContactPickerFragment 作为子片段。当 ContactPickerFragment 发出 startActivityForResult(...) 调用时,onActivityResult(...) 回调在 WizardActivity 中收到。

问题:

首先,WizardActivity's 成员变量 contactPickerFragment 从未被使用过。它不属于您的 ui。因此,在 WizardActivity#onActivityResult(...) 中调用 contactPickerFragment.onActivityResult(....) 除了打印一些日志语句外什么都不做。此外,对 super.onActivityResult(...) 的调用完全丢失了。正确的方法是检查请求代码是否由 WizardActivity 发出。如果不是,则调用超级方法会将 onActivityResult(..) 调用路由到片段 SetupContactsFragment

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // currently, WizardActivity does not deal with 
    // any onActivityResult callbacks
    super.onActivityResult(requestCode, resultCode, data);
}

SetupContactsFragment 现在可以接收 onActivityResult(...) 回调。尽管如此,我们仍需要识别 onActivityResult(...) 并将其分派到正确的子片段。一种方法是为每个子片段分配不同的 requestCode。在 SetupContactsFragment#onActivityResult(...) 中,我们遍历所有子片段并调用它们的 onActivityResult(...) 方法。由于我们为每个片段分配了不同的 requestCode,因此只会处理其中一个调用。

但是,我不明白为什么您需要三个相同的子片段,每个子片段都包含一个输入字段和一个按钮。这些小部件都可以是 SetupContactsFragemets' ui 的一部分。即使将来规格从 3 个联系人更改为 10 个,您也可以实施一种方法,多次膨胀和添加每一行。

在这种情况下,您将需要 3 个唯一 requestCodes。基于 ImageButton 被按下,不同的 requestCode 被用于 startActivityForResult(...)。在 onActivityResult(...) 中,requestCode 将指示需要更新的 EditText