我知道有几个相关的主题,但我都试过了,但没有任何反应。我有一个“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 以及我是否遗漏了其他任何内容?
经过数小时的研究,我终于解决了这个问题,如下所示:因为我在一个活动中有两个嵌套的片段作为孩子和父母,我设计对每个项目采取行动点击 recyclerView 项目并转到另一个活动以获得结果返回并刷新列表,我在 MainActivity 中添加了此代码:
@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()
如果有一天你处理了这样的问题,我希望这对你也有用
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句