首页 > 解决方案 > 滑动刷新 webview 片段不加载 url

问题描述

我的MainActivity. 我正在尝试在其中添加 Swipetoview。但是当我加载片段时,它不会加载 url。

我的片段:

 // Inflate the layout for this fragment
    View vDriver=inflater.inflate(R.layout.fragment_drivers, container, false);
    mWebView = vDriver.findViewById(R.id.drivers_webview);
    mWebView.loadUrl("https://ahmetbarpa-grand-prix.firebaseapp.com/drivers.html");

    // Enable Javascript
    //WebSettings webSettings = mWebView.getSettings();
    //webSettings.setJavaScriptEnabled(true);

    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());


    swipeLayout = vDriver.findViewById(R.id.fragment_drivers);
    swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mWebView.reload();
            new Handler().postDelayed(new Runnable() {
                @Override public void run() {
                    swipeLayout.setRefreshing(false);
                }
            }, 5000);
        }
    });

    return vDriver;

我的片段布局:

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_drivers"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Drivers">

    <WebView
        android:id="@+id/drivers_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</android.support.v4.widget.SwipeRefreshLayout>

我尝试了不同的东西,这是我尝试的最后一个代码。我究竟做错了什么?

提前感谢您的时间。

编辑:主要活动

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.support.design.widget.NavigationView;
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.MenuItem;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.squareup.picasso.Picasso;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener, HomeFragment.OnFragmentNavListener,Drivers.OnDriverNavigationListener {

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private GoogleApiClient mGoogleApiClient;
    private static final int RC_SIGN_IN = 0 ;
    private SignInButton btn_signin;
    private TextView nameText;

private TextView emailText;
private ImageView imgProfilePic;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    HomeFragment fragment = new HomeFragment();
    fragmentTransaction.add(R.id.fragment_container, fragment);
    fragmentTransaction.commit();


    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);


    View navHeader1 = navigationView.getHeaderView(0);
    btn_signin = navHeader1.findViewById(R.id.signin_btn);
    View navHeader3 = navigationView.getHeaderView(0);
    nameText = navHeader3.findViewById(R.id.name);
    View navHeader4 = navigationView.getHeaderView(0);
    emailText = navHeader4.findViewById(R.id.email);
    View navHeader5 = navigationView.getHeaderView(0);
    imgProfilePic = navHeader5.findViewById(R.id.imgProfilePic);


    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

                }
            })
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso).build();

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null){
                btn_signin.setVisibility(View.GONE);
                if(user.getDisplayName() != null) {
                    nameText.setText(user.getDisplayName());
                    nameText.setVisibility(View.VISIBLE);
                }
                emailText.setText(user.getEmail());
                emailText.setVisibility(View.VISIBLE);
                imgProfilePic.setVisibility(View.VISIBLE);
                Picasso.get().load(user.getPhotoUrl())
                        .into(imgProfilePic);

                NavigationView navigationView2 = findViewById(R.id.nav_view);
                Menu menu = navigationView2.getMenu();
                MenuItem target = menu.findItem(R.id.nav_send);
                target.setVisible(false);
                MenuItem target2 = menu.findItem(R.id.nav_send2);
                target2.setVisible(true);

            }
            else {

                nameText.setVisibility(View.GONE);
                emailText.setVisibility(View.GONE);
                btn_signin.setVisibility(View.VISIBLE);

                NavigationView navigationView2 = findViewById(R.id.nav_view);
                Menu menu = navigationView2.getMenu();
                MenuItem target = menu.findItem(R.id.nav_send);
                target.setVisible(true);
                MenuItem target2 = menu.findItem(R.id.nav_send2);
                target2.setVisible(false);
                imgProfilePic.setVisibility(View.GONE);
            }

        }
    };

    btn_signin.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            signIn();
        }
    });

}

@Override
public void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

private void signIn () {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);
        } else {
            // deneme
        }
    }
}

@Override
public void onStop() {
    super.onStop();
    if(mAuthListener != null) {
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (!task.isSuccessful()) {
                        Toast.makeText(getApplicationContext(), "Authentication failed.", Toast.LENGTH_SHORT).show();
                    }
                }
            });
}

@Override
public void onBackPressed() {
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(final MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_camera) {
        // Handle the camera action
    } else if (id == R.id.nav_gallery) {

    } else if (id == R.id.nav_slideshow) {

    } else if (id == R.id.nav_manage) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_send) {

        signIn();

    } else if (id == R.id.nav_send2) {

        FirebaseAuth.getInstance().signOut();
        Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                new ResultCallback<Status>() {
                    @Override
                    public void onResult(@NonNull Status status) {
                        Toast.makeText(getApplicationContext(), "Çıkış yaptınız.", Toast.LENGTH_SHORT).show();
                    }
                });

    }

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

@Override
public void onFragmentNav(int position) {

    Fragment navFragment = null;

    switch (position) {

        case 0:
            navFragment = new HomeFragment();
            break;
        case 1:
            navFragment = new Drivers();
            break;
    }

    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.fragment_container, navFragment)
            .addToBackStack(null)
            .commit();
}

@Override
public void onDriverNavigation(int asd) {

}

}

HomeFragment.java

    package com.ahmetbarpa.grandprix;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;


public class HomeFragment extends Fragment {

    private OnFragmentNavListener mListener;

    public HomeFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v1 =inflater.inflate(R.layout.fragment_home, container, false);


        Button profile= v1.findViewById(R.id.button1);
        profile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                onButtonSelected(1);
            }
        });

        Button education= v1.findViewById(R.id.button2);
        education.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                Toast.makeText(getContext(),"Takımlar ve arabalar",Toast.LENGTH_SHORT).show();
            }
        });

        Button health= v1.findViewById(R.id.button3);
        health.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                Toast.makeText(getContext(),"Pistler",Toast.LENGTH_SHORT).show();
            }
        });

        Button goals= v1.findViewById(R.id.button4);
        goals.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                Toast.makeText(getContext(),"Sıralama",Toast.LENGTH_SHORT).show();
            }
        });

        Button finance= v1.findViewById(R.id.button5);
        finance.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                Toast.makeText(getContext(),"Grand Prix Tarihi",Toast.LENGTH_SHORT).show();
            }
        });

        Button comfort= v1.findViewById(R.id.button6);
        comfort.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                Toast.makeText(getContext(),"GP kart oyunu",Toast.LENGTH_SHORT).show();
            }
        });

        return v1;

    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonSelected(int position) {
        if (mListener != null) {
            mListener.onFragmentNav(position);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentNavListener) {
            mListener = (OnFragmentNavListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentNav");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    /**
     * This interface must be implemented by activities that contain this
     * fragment to allow an interaction in this fragment to be communicated
     * to the activity and potentially other fragments contained in that
     * activity.
     * <p>
     * See the Android Training lesson <a href=
     * "http://developer.android.com/training/basics/fragments/communicating.html"
     * >Communicating with Other Fragments</a> for more information.
     */
    public interface OnFragmentNavListener {
        void onFragmentNav(int position);
    }
    }

标签: javaandroidxmlswiperefreshlayout

解决方案


而不是 reload()

mWebView.loadUrl("https://ahmetbarpa-grand-prix.firebaseapp.com/drivers.html");

试试看..

如果这不是您想要的方式,则第二种方法是:

创建一个新类:

private class MyBrowser extends WebViewClient {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
     view.loadUrl(url);
     return true;
  }
} 

然后,而不是这个:

mWebView.setWebViewClient(new WebViewClient());

写这个:

mWebView.setWebViewClient(new MyBrowser());

希望你的问题能得到解决


推荐阅读