Android 未通过自定义适配器在片段对话框中调用onActivityResult
对安卓来说,这是相当新的。我有以下场景:Android 未通过自定义适配器在片段对话框中调用onActivityResult,android,android-fragments,onactivityresult,Android,Android Fragments,Onactivityresult,对安卓来说,这是相当新的。我有以下场景: 应用程序在主活动中启动,我在这里添加了一个片段 在这个片段是一个用自定义适配器填充的listview中,我正在将FragmentActivity的一个实例传递给适配器。 电话: 实施: public ExpandableListAdapter(Context context, FragmentActivity activity, List<String> listDataHeader, HashMap<String, List<
FragmentActivity
的一个实例传递给适配器。
电话:
public ExpandableListAdapter(Context context, FragmentActivity activity, List<String> listDataHeader, HashMap<String, List<String>> listChildData) {
this._context = context;
this._activity = activity;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
private class ContactListener extends Activity implements View.OnFocusChangeListener
{
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
_activity.startActivityForResult(intent, CONTACTS_RESULT);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CONTACTS_RESULT && resultCode == RESULT_OK) {
String cell = "?", firstName = "?", lastName = "?";
uriContact = data.getData();
Cursor cursor = null;
mCell.setText(cell);
mLastName.setText(lastName);
mFirstName.setText(firstName);
}
}
}
onActivityResult
override方法。我不知道该怎么办,似乎其他人和我有不同的想法,他们的解决方案对我不起作用
有人知道我能做什么吗?你需要调用这个来调用你的
onActivityResult
。关闭时,在对话框中输入此代码
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
我建议为此使用一个接口。例如,创建必须在活动中实现的接口
ContactCallback
。创建适配器时,传递此
(表示接口)。当您单击适配器内的项调用时,将传递回调,如callback.onContactSelected()
。在活动中实现的onContactSelected()
中,您可以打开对话框
更新:
对于从未调用您的onActivityResult()
的问题:
清单中是否有一行名为“”的android:launchMode=“singleTask”
?请将其删除,然后应调用该行。以下情况可能会导致接收结果时出现问题:
- 检查您是否正确使用了
,不要使用startActivityForResult()
startActivity()
- 如果在重写的
方法中执行某些操作,onBackPressed
必须位于方法的最后一行,而不是第一行super.onBackPressed();
- 删除清单或等效参数中的android:launchMode=“singleInstance”,以创建意图
- 删除被调用活动清单中的
noHistory=“true”
- 缺少检查
setResult()
- 调用
关闭活动。使用finish()
关闭调用的活动finishActivity()
- 请使用大于零的requestCode。负值无效
MainActivity
中实现onactivityresult
来获得结果现在最重要的问题是用联系人详细信息更新对话框字段(单元格、显示名称)。感谢您的帮助。我将SelectContactDialog从dialog更改为activity,我从未如此高兴过!我是新手,所以我正在学习正确的做事方法。
private class ContactListener extends Activity implements View.OnFocusChangeListener
{
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
_activity.startActivityForResult(intent, CONTACTS_RESULT);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CONTACTS_RESULT && resultCode == RESULT_OK) {
String cell = "?", firstName = "?", lastName = "?";
uriContact = data.getData();
Cursor cursor = null;
mCell.setText(cell);
mLastName.setText(lastName);
mFirstName.setText(firstName);
}
}
}
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();