【发布时间】:2016-08-28 08:35:00
【问题描述】:
在我的 android 应用程序中,我使用片段创建了 4 个选项卡,每个选项卡加载不同的 URL,效果很好,但是,
1) 我如何将 onBackpressed 添加到每个 webview 以在返回单击时加载上一页?我知道如何在 java 类中做到这一点,但 Override 在 Fragment 中不起作用。
2) 我的第二个问题是我已经为每个 webview 添加了一个 ProgressDialog,它工作正常,但覆盖整个布局,直到加载完整的网页,我如何让它只显示在像浏览器一样的顶部,同时能够查看和滚动加载的网页? 以下是我的片段代码。
GoogleFragment.java
Public class GoogleFragment extends Fragment {
WebView myWebView;
ProgressDialog pd;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_webview, container, false);
final ProgressDialog pd = ProgressDialog.show(getContext(), "", "Loading Please wait...", true);
myWebView = (WebView) v.findViewById(R.id.WebView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("http://www.google.com/");
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
//improve webView performance
myWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
myWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
myWebView.getSettings().setAppCacheEnabled(true);
myWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webSettings.setDomStorageEnabled(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setUseWideViewPort(true);
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setEnableSmoothTransition(true);
myWebView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
pd.show();
}
@Override
public void onPageFinished(WebView view, String url) {
pd.dismiss();
String webUrl = myWebView.getUrl();
}
});
return v;
}
}
MainActivity.java
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.NavigationView;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.nav.R;
import com.nav.fragments.TabFragment;
import java.util.Timer;
public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
DrawerLayout mDrawerLayout;
NavigationView mNavigationView;
FragmentManager mFragmentManager;
FragmentTransaction mFragmentTransaction;
private InterstitialAd interstitial;
public Timer AdTimer;
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
}
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mNavigationView = (NavigationView) findViewById(R.id.main_drawer) ;
int width = getResources().getDisplayMetrics().widthPixels/2;
DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) mNavigationView.getLayoutParams();
params.width = width;
mNavigationView.setLayoutParams(params);
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.frame_container, new TabFragment()).commit();
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
mDrawerLayout.closeDrawers();
//setTitle(menuItem.getTitle());
if (menuItem.getItemId() == R.id.drawer_home) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame_container, new TabFragment()).commit();
}
if (menuItem.getItemId() == R.id.drawer_facebook){
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_gPlus){
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_rate) {
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_more) {
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_profile) {
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_share) {
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_youtube) {
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
if (menuItem.getItemId() == R.id.drawer_exit) {
Toast.makeText(MainActivity.this,
"Replace with your own function", Toast.LENGTH_LONG).show();
}
return false;
}
});
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(menuItem);
}
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
}
else {
super.onBackPressed();
}
}
@Override
public void onStart() {
super.onStart();
// analytics
GoogleAnalytics.getInstance(this).reportActivityStart(this);
} }
TabFragment.java
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.nav.R;
public class TabFragment extends Fragment {
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 6 ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab_layout, container, false);
tabLayout = (TabLayout) v.findViewById(R.id.tabs);
viewPager = (ViewPager) v.findViewById(R.id.viewpager);
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return v;
}
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch (position){
case 0 : return new GoogleFragment();
case 1 : return new SportsFragment();
case 2 : return new GamesFragment();
case 3 : return new PhotographyFragment();
case 4 : return new WildFragment();
case 5 : return new TravelFragment();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position){
case 0 :
return getResources().getString(R.string.tab1);
case 1 :
return getResources().getString(R.string.tab2);
case 2 :
return getResources().getString(R.string.tab3);
case 3 :
return getResources().getString(R.string.tab4);
case 4 :
return getResources().getString(R.string.tab5);
case 5 :
return getResources().getString(R.string.tab6);
}
return null;
}
}
}
【问题讨论】:
标签: android android-fragments webview progressdialog onbackpressed