如何从适配器设置startActivityForResult并在viewPager片段中获取结果



我知道有几个相关的主题,但我都试过了,什么都没发生。我有一个"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()

我希望这也适用于你,如果你有一天处理这样的问题

相关内容

  • 没有找到相关文章

最新更新