我知道有几个相关主题,但是我都尝试了所有相关主题,但没有任何反应。我有一个“ MainActivity”类,其中包含一个名为“ HomeFragment”的片段,该片段包含一个带有两个片段的viewPager,其中两个片段称为“ ListFragment”。通过设置名为“ ListAdapter”的适配器,每个项目的onClick方法都可以正常工作,问题出在我设置时:
intentRequestDetails.putExtra(KEY_POSITION, position);
intentRequestDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity) context).startActivityForResult(intentRequestDetails, 2);
到适配器上的onItemClick, 我不知道如何在“ ListFragment”中得到结果。 我将“ getActivity()”传递给适配器和ListFragment,但它们都不起作用! 请帮我解决这个问题,以获取“ ListFragment”的结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2) {
if (resultCode == Activity.RESULT_OK) {
int position = data.getIntExtra("position", -1);
userRequestsViewModel.getResult().remove(position);
viewHolder.rView.getAdapter().notifyItemRemoved(position);
viewHolder.rView.getAdapter().notifyItemRangeChanged(position, viewHolder.rView.getAdapter().getItemCount());
} else if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
我需要的 从片段传递到适配器的上下文是什么?在哪里以及如何覆盖onActivityResult,以及是否还有其他我想念的东西?
答案 0 :(得分:0)
除了在片段中覆盖onActivityResult
外,您还需要在活动类中覆盖它:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentById("yourFragment");
fragment.onActivityResult(requestCode, resultCode, data);
}
及其片段:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//do something
}
答案 1 :(得分:0)
经过数小时的研究,我终于解决了以下问题: 因为我在一个活动中有两个嵌套的片段作为父项和子项,所以我设计要对每个项目执行操作,请单击recyclerView项,然后转到另一个活动以获取结果并刷新列表,因此我在MainActivity中添加了以下代码: / p>
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().getFragments().get(1);
fragment.onActivityResult(requestCode, resultCode, data);
}
选择要向其传递数据的目标片段(parentFragment),然后在该parentFragment中添加以下方法:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getChildFragmentManager().getFragments().get(1);
fragment.onActivityResult(requestCode, resultCode, data);
}
发送onActivityResult到子片段。毕竟在子片段中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2){
if (resultCode == Activity.RESULT_OK) {
int position = data.getIntExtra("position", -1);
userRequestsViewModel.getResult().remove(position);
viewHolder.rView.getAdapter().notifyItemRemoved(position);
viewHolder.rView.getAdapter().notifyItemRangeChanged(position, viewHolder.rView.getAdapter().getItemCount());
}
}
}
刷新recyclerView适配器并通知它已删除某物品!另一个重要的一点是,在适配器中,我只是这样做的:
Intent intent = new Intent(view.getContext(), SecondActivity.class);
intent.putExtra(KEY_POSITION, position);
((Activity) context).startActivityForResult(intent, 2);
并删除以下代码行:
intentRequestDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
当然,我将活动上下文从片段传递到适配器:
getContext()
如果您有一天要解决这样的问题,我希望这对您也有用