关闭在Adapter中启动的活动后,如何刷新先前的片段?

布鲁诺·桑托斯(Bruno Santos)

我有一个带有显示一些CardView的RecyclerView的片段(FragmentA)。我想让cardviews可点击,所以我找到的解决方案是在适配器类内部的ViewHolder中实现View.OnClickListener。像这样的东西:

fragmentAAdapter.java

public class fragmentAViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {       

    public fragmentAViewHolder (View itemView) {
        super(itemView);            

        itemView.setOnClickListener(this);
    }     

    @Override
    public void onClick(View v) {
        //do something..
    }
}

的onClick()方法从点击的cardview获取数据,并开始谁显示数据的活动(InfoActivity)。

OnClick()方法

@Override
    public void onClick(View v) {            
        Intent intent = new Intent(itemView.getContext(), InfoActivity.class);

        Bundle mBundle = new Bundle();
        mBundle.putParcelable("someData", someData);
        intent.putExtras(mBundle);            
        itemView.getContext().startActivity(intent);
    }

在InfoActivity中,我可以更新和删除数据。之后,我想完成InfoActivity并刷新FragmentA以获取新数据。

要关闭活动并刷新上一个片段,我尝试使用startActivityForResult()像这样:

@Override
    public void onClick(View v) {            
        Intent intent = new Intent(itemView.getContext(), InfoActivity.class);       

        ((Activity)  itemView.getContext()).startActivityForResult(intent, 10001);

    }

InfoActivity.java

@Override
    public void onClick(DialogInterface dialog, int which) {        
    setResult(InfoActivity.RESULT_OK);
    finish();
}

FragmentA.java

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if ((requestCode == 10001) && (resultCode == InfoActivity.RESULT_OK)) {

        FragmentAfragment  = new FragmentA();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    }
}

但是,当我关闭InfoActivity时,什么也没发生。

问题在于setResult(InfoActivity.RESULT_OK)将结果返回给适配器类(fragmentAAdapter),而不是返回给FragmentA,因此从不调用FragmentA中的onActivityResult()方法

关闭在FragmentAAdapter的onClick()方法内启动的InfoActivity之后,如何刷新FragmentA?


更新-解决方案

我在FragmentA的活动中重写了onActivityResult()方法。像这样:

MainActivity.java

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if ((requestCode == 10001) && (resultCode == 10001)) {

        FragmentA fragment  = new FragmentA();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    }
}

并在InfoActivity.java中

@Override
public void onClick(DialogInterface dialog, int which) {        
    setResult(10001);
    finish();
}

每次关闭活动并返回FragmentA时,都会调用MainActivity中的onActivityResult(),并且当条件if((requestCode == 10001)&&(resultCode == 10001))true时,将刷新FragmentA。

AndroidRuntimeException

在片段的活动中,您可以执行以下操作:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    requestCode &= 0xffff;
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        if (fragment != null) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

或者您可以使用事件总线,例如:http : //square.github.io/otto/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android中完成活动后如何刷新片段?

来自分类Dev

如何从Android中的活动刷新片段?

来自分类Dev

如何从片段回到先前的活动

来自分类Dev

在Android中关闭提醒对话框后,如何在活动调用中刷新TextView?

来自分类Dev

如何从主要父活动以外的活动中启动片段?

来自分类Dev

当通过意图过滤器启动活动时,如何关闭先前的活动?

来自分类Dev

从活动回来后刷新片段

来自分类Dev

启动活动后如何中止通话并关闭拨号器?

来自分类Dev

在Java中关闭当前表单后如何启用先前的表单

来自分类Dev

如何在不承载该片段的活动中刷新从 Listview 接收数据的片段中的 Textview

来自分类Dev

如何启动活动或在片段中调用意图?

来自分类Dev

如何通过活动在ViewPager中启动片段

来自分类Dev

在销毁活动后恢复活动时如何从片段管理器中删除片段

来自分类Dev

我希望取消对话框片段后可以刷新/重画活动。如何实现?

来自分类Dev

关闭JavaScript中的弹出窗口后如何刷新父页面?

来自分类Dev

在JavaFX中关闭子窗口后如何刷新父窗口?

来自分类Dev

在活动关闭时如何防止添加片段

来自分类Dev

在关闭Android中的另一个活动后如何关闭主要活动?

来自分类Dev

如何使用“单击按钮”从“正常”活动中启动“列表片段”活动

来自分类Dev

如何从另一个活动中启动一个活动的片段?

来自分类Dev

在片段中启动活动以获取结果

来自分类Dev

在 Android Studio 中从片段启动新活动

来自分类Dev

无法显示新活动中先前片段的数据

来自分类Dev

无法显示新活动中先前片段的数据

来自分类Dev

如何刷新先前的活动ToolBar菜单(购物车)值

来自分类Dev

如何刷新先前的活动ToolBar菜单(购物车)值

来自分类Dev

添加新片段后,先前的片段元素仍然处于活动状态

来自分类Dev

通话结束后如何在android中启动活动?

来自分类Dev

在Android中成功登录后如何启动新活动?

Related 相关文章

  1. 1

    在Android中完成活动后如何刷新片段?

  2. 2

    如何从Android中的活动刷新片段?

  3. 3

    如何从片段回到先前的活动

  4. 4

    在Android中关闭提醒对话框后,如何在活动调用中刷新TextView?

  5. 5

    如何从主要父活动以外的活动中启动片段?

  6. 6

    当通过意图过滤器启动活动时,如何关闭先前的活动?

  7. 7

    从活动回来后刷新片段

  8. 8

    启动活动后如何中止通话并关闭拨号器?

  9. 9

    在Java中关闭当前表单后如何启用先前的表单

  10. 10

    如何在不承载该片段的活动中刷新从 Listview 接收数据的片段中的 Textview

  11. 11

    如何启动活动或在片段中调用意图?

  12. 12

    如何通过活动在ViewPager中启动片段

  13. 13

    在销毁活动后恢复活动时如何从片段管理器中删除片段

  14. 14

    我希望取消对话框片段后可以刷新/重画活动。如何实现?

  15. 15

    关闭JavaScript中的弹出窗口后如何刷新父页面?

  16. 16

    在JavaFX中关闭子窗口后如何刷新父窗口?

  17. 17

    在活动关闭时如何防止添加片段

  18. 18

    在关闭Android中的另一个活动后如何关闭主要活动?

  19. 19

    如何使用“单击按钮”从“正常”活动中启动“列表片段”活动

  20. 20

    如何从另一个活动中启动一个活动的片段?

  21. 21

    在片段中启动活动以获取结果

  22. 22

    在 Android Studio 中从片段启动新活动

  23. 23

    无法显示新活动中先前片段的数据

  24. 24

    无法显示新活动中先前片段的数据

  25. 25

    如何刷新先前的活动ToolBar菜单(购物车)值

  26. 26

    如何刷新先前的活动ToolBar菜单(购物车)值

  27. 27

    添加新片段后,先前的片段元素仍然处于活动状态

  28. 28

    通话结束后如何在android中启动活动?

  29. 29

    在Android中成功登录后如何启动新活动?

热门标签

归档