【问题标题】:Swipe to refresh issue滑动刷新问题
【发布时间】:2019-01-27 20:24:02
【问题描述】:

我将隐藏片段添加到第一个片段,然后它显示第二个片段没有任何问题,但是现在当我使用滑动刷新应用程序崩溃时..请帮我解决这个问题。

使用此代码隐藏第一个片段 iam:

public void replaceFragment(Fragment someFragment, String tag) {

FragmentManager fm = getFragmentManager();
Fragment fragment = fm.findFragmentByTag(tag);
Fragment fragment2 = fm.findFragmentById(R.id.frameContainer);

if (fragment != fragment2) {
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.setCustomAnimations(R.anim.right_enter, R.anim.left_out, R.anim.left_enter, R.anim.right_out);
    transaction.hide(fragment2);
    transaction.add(R.id.frameContainer,someFragment);
    transaction.addToBackStack(tag);
    transaction.commit();
}

为了在 Activity 中滑动刷新,我正在使用此代码:

 private void swipe_swipeRefresh() {
        String fragment = null;
        swipeRefreshLayout.setRefreshing(true);
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.frameContainer);
        if (currentFragment instanceof FragmentHome) {
            fragment = "FragmentHome";
            }
        if (currentFragment instanceof BlogFragment) {
            fragment = "BlogFragment";
        }
      Handler handler = new Handler();
        final String finalFragment = null;
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                SettingsMain.reload(HomeActivity.this, finalFragment);
                swipeRefreshLayout.setRefreshing(false);
             SettingsMain.hideDilog();
            }
        }, 2000);
    }

SettingsMain.reload(HomeActivity.this, finalFragment);这条线来自:

  public static void reload(Context context, String tag) {
        Fragment frg;
        FragmentManager manager = ((AppCompatActivity) context).getSupportFragmentManager();

        frg = manager.findFragmentByTag(tag);
        final FragmentTransaction ft = manager.beginTransaction();

      ft.detach(frg);
      ft.attach(frg);
      ft.commit();
    }

【问题讨论】:

    标签: android android-fragments swiperefreshlayout


    【解决方案1】:

    请注意,SettingsMain.reload(HomeActivity.this, finalFragment); 中的 finalFragment 在您的代码中是 null,因为以下行:

        final String finalFragment = null;
    

    接下来,在reload() 方法内部使用frg = manager.findFragmentByTag(tag);。但是这里的tag 是空的,所以它找不到片段。导致frg 成为null。因为frgnull,所以分离和附加它会导致崩溃。

    要修复它,请尝试将行更改为

    final String finalFragment = fragment;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多