【问题标题】:How to prevent refreshing of webview in navigation drawer如何防止在导航抽屉中刷新 webview
【发布时间】:2016-09-27 08:24:18
【问题描述】:

有一段时间我一直在使用viewpager 在活动中显示webview 页面,但现在我已经从viewpager 更改为navigation drawer with RecyclerView,以显示webview,我有多个webview 加载我的活动。

假设活动从 webview 1 开始,然后我点击 webview 2 如果我回到 webview 1 它将重新加载(刷新)并且我想阻止这不会发生。

请帮忙。

这是我的主要活动。

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener {
private Toolbar toolbar;
private FragmentDrawer drawerFragment;

private static String TAG = MainActivity.class.getSimpleName();

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.tool_bar);
    if (toolbar != null) {
        toolbar.setTitle(R.string.app_name);
        setSupportActionBar(toolbar);
    }
    drawerFragment = (FragmentDrawer)
            getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
    drawerFragment.setDrawerListener(this);


    displayView(0);

    }

@Override
public void onDrawerItemSelected(View view, int position) {
    displayView(position);
}

private void displayView(int position) {
    Fragment fragment = null;
    String title = getString(R.string.app_name);
    switch (position) {
        case 0:
            fragment = new TopRatedFragment();
            title = getString(R.string.title_home);
            break;
        case 1:
            fragment = new GamesFragment();
            title = getString(R.string.title_friends);
            break;
        case 2:
            fragment = new MoviesFragment();
            title = getString(R.string.title_messages);

        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.container_body, fragment);
        fragmentTransaction.commit();


        getSupportActionBar().setTitle(title);
    }
}
}

【问题讨论】:

    标签: android android-fragments webview


    【解决方案1】:

    您是说要恢复同一个片段吗?这是来自developer.android.com

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    
    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack so the user can navigate back
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);
    
    // Commit the transaction
    transaction.commit();
    

    这使后退导航按钮能够恢复已加载 web 视图的同一片段。每次在 switch 语句中创建一个新的。

    一旦你让后退按钮按你想要的方式工作,你就可以轻松地学习如何手动将特定片段从堆栈中拉出。

    编辑:

    我不认为你正在刷新 webview。每次通过调用空构造函数选择一个项目时,您都会创建一个新片段。您只需创建一次每个片段,然后在返回该 web 视图时使用该片段的相同实例。使用后台堆栈将使它在您离开应用程序时保持加载状态并稍后返回。

    还可以尝试使用静态方法YourFragment.newInstance(params),它返回一个新的YourFragment 实例。这样做而不是空构造函数,因为这被认为是不正确的做法。

    【讨论】:

    • 我不这么认为,这是正确的做法。
    • 我已经用更多相关信息更新了我的答案。希望这能帮助您解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多