我知道有几个相关的主题,但我都试过了,什么都没发生。我有一个"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,以及是否还有我遗漏的其他内容?
- 由于从ListAdapter调用startActivityForResult,因此ListFragment中的onActivityResult未触发!我该如何处理
- 如果有机会更新列表,如何在MainActivity中获取适配器和ListFragment
除了覆盖片段中的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
}
经过数小时的研究,我终于解决了这个问题,如下所示:由于我在一个活动中有两个嵌套片段作为子片段和父片段,并且我设计对每个项目采取行动,请单击recyclerView项目并转到另一个活动以获取结果并刷新列表,因此我在MainActivity:中添加了以下代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().getFragments().get(1);
fragment.onActivityResult(requestCode, resultCode, data);
}
选择要向其传递数据的目标片段(parentFragment(,然后在该parentFraction中添加此方法:
@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()
我希望这也适用于你,如果你有一天处理这样的问题