Android新手。我有以下情况:
在该片段中是一个使用自定义适配器填充的listview,我将FragmentActivity
的实例传递给适配器。
拨打:
ExpandableListAdapter listAdapter new ExpandableListAdapter(mContext, mActivity, listDataHeader, listDataChild);
实现:
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;
}
当您单击列表中的某个项目时,它会打开一个包含edittext字段的对话框,即:Name,Surname,Cell。我将FragmentActivity作为上下文传递给对话框:
txtListChild.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new SelectContactDialog(_activity);
dialog.show();
}
});
然后当您关注3个字段中的任何一个时,会打开一个Select联系人,我正在使用传递的FragmentActivity来调用startActivityForResult,如下所示:
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
覆盖方法。我不知道该怎么做,似乎其他人与我的不同,他们的解决方案对我不起作用。
任何人都知道我能做什么?
答案 0 :(得分:2)
我建议使用接口。例如,创建必须在活动中实现的接口ContactCallback
。创建适配器时,传递this
(表示接口)。单击适配器内的项目调用时,会传递回调,如callback.onContactSelected()
。在您的活动中实施的onContactSelected()
内,您可以打开对话框。
<强>更新强>
问题是您的onActivityResult()
从未被调用过:
您的清单中是否有一行名为"android:launchMode="singleTask"
?删除它,它应该被调用。以下情况可能会导致收到结果的问题:
检查您是否正确使用startActivityForResult()
,请勿使用startActivity()
。
如果您在覆盖onBackPressed
方法中执行某项操作,则super.onBackPressed();
必须位于方法的最后一位,而不是第一行。
删除清单或等效参数中的android:launchMode="singleInstance"
以创建意图。
删除被调用活动清单中的noHistory="true"
。
检查错过了setResult()
。
finish()
来关闭活动。使用finishActivity()
关闭被叫活动。
使用requestCode大于零。负值不起作用。
答案 1 :(得分:-2)
您需要调用它来调用onActivityResult
。在你关闭的对话框中放入此代码
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();