使用多个标签

时间:2017-03-09 12:33:33

标签: java android webview

我正在制作一个Android应用,它使用带有标签的appBarLayout和加载其下方的外部网址的webViews。在工具栏菜单中,我想添加一个刷新选项,只刷新当前选项卡。我无法弄清楚如何让它在我的特定情况下工作。我已经尝试了this solution但是当我按下刷新按钮时,应用程序崩溃了。

编辑:我认为我需要编辑的唯一部分是我的MainActivity.java中的if (id == R.id.action_refresh)。但是因为我有4个标签(Tab0,Tab1等),我认为不应该说Tab0.webview.reload();,而只是当前打开的标签。

这是我的MainActivity.java

public class MainActivity extends AppCompatActivity {

private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOffscreenPageLimit(3);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        //TODO
        return true;
    }
    if (id == R.id.action_refresh) {
        //What comes here?
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                Tab0 tab0 = new Tab0();
                return tab0;
            case 1:
                Tab1 tab1 = new Tab1();
                return tab1;
            case 2:
                Tab2 tab2 = new Tab2();
                return tab2;
            case 3:
                Tab3 tab3 = new Tab3();
                return tab3;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        // Show 4 total pages.
        return 4;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Tab 0";
            case 1:
                return "Tab 1";
            case 2:
                return "Tab 2";
            case 3:
                return "Tab 3";
        }
        return null;
    }
}
}

我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.my.app.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        android:background="@android:color/holo_red_light">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:background="@android:color/holo_red_light"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="44dp"
            android:background="@android:color/holo_red_light"
            app:tabMode="scrollable" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" >

    </android.support.v4.view.ViewPager>

</android.support.design.widget.CoordinatorLayout>

我的Tab0.java

public class Tab0 extends Fragment {

WebView webview;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View rootView = inflater.inflate(R.layout.tab0, container, false);
    webview = (WebView)rootView.findViewById(R.id.webview0);
    webview.setWebViewClient(new WebViewClient());
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);
    webview.getSettings().setBuiltInZoomControls(true);
    CookieManager.getInstance().setAcceptCookie(true);
    webview.loadUrl("https://www.google.com");
    return rootView;
}
} 

我的tab0.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.my.app.MainActivity$SectionsPagerAdapter">

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview0"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
</RelativeLayout>

有人可以帮我实现刷新按钮吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

WebView.reload()应该是你提到的帖子中提到的方式。

如果您的应用因此崩溃,那么您可能会犯错误。什么是崩溃错误?

onOptionsItemSelected方法中使用以下内容:

if (id == R.id.action_refresh) {
    ((WebView) mSectionsPagerAdapter.getItem(0).getView().findViewById(R.id.webview0)).reload();
    return true;
}