如何从适配器设置 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 以及我是否遗漏了其他任何内容?

  • ListFragment 中的 onActivityResult 不会触发,因为 startActivityForResult 是从 ListAdapter 调用的!我该如何处理?
  • 如果有机会更新列表,如何在 MainActivity 中获取适配器和 ListFragment?
拜拜

经过数小时的研究,我终于解决了这个问题,如下所示:因为我在一个活动中有两个嵌套的片段作为孩子和父母,我设计对每个项目采取行动点击 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

片段的ViewPager中的Listview适配器-如何获取活动

即使设置了新的适配器,ViewPager仍保留片段的实例

ViewPager +片段中的适配器=>拖拉

从ViewPager中的片段调用适配器

如何在适配器类中设置值列表项并在按钮上单击以获取值

从非活动类调用startActivityForResult()并在现有活动或片段中获取结果

如何从viewpageradpater“连续”更新片段的textview?viewpager适配器在主片段中

如何在 dialogFragment 中的 viewPager 中的片段中填充适配器?

在 viewpager 重新加载适配器中强制片段

我如何从适配器获取数据并在Android的“活动”中显示

如何从模型类中检索全部子代并在android中传递适配器?

Android:从viewPager中的Fragment调用ListView的适配器的getview()

在片段中设置适配器

如何在Android的适配器中设置数据

Android-ViewPager适配器,在实例化适配器之前设置主要项目

通过数据绑定设置ViewPager的适配器

如何为此ViewPager和TextViews布局设置适配器?

ListView设置适配器片段nullpointerexception

从带有SwipeToRefresh布局的ViewPager适配器中的CardList的RecycleView中获取scrollY属性

如何在recycleview适配器中设置布局可见性,我的适配器代码是

来自不同选项卡式片段的Android ViewPager更新列表适配器

片段,viewPager,列表视图和适配器不起作用

在适配器中设置 GradientDrawable 颜色

如何使用RecyclerView在适配器中设置setOnClickListener以显示片段内部

如何在适配器的底部工作表片段中设置TextView占位符

如何从适配器调用片段

如何从适配器调用片段方法?

在片段中为ListView设置适配器

如何从片段中获取高度并设置Viewpager的高度?