将Url传递到另一个WebView选项卡并加载

时间:2014-11-18 15:32:08

标签: android webview

我是编程新手。 我创建了一个包含3个带有viewpager选项卡的应用程序。第一个选项卡是Button列表及其各自的链接。第二个选项卡是一个WebView,当用户点击链接时,它将加载从第一个选项卡传递的URL。第三个标签是我的下载管理器。

这是我的MainActivity:

 public class MainActivity extends SherlockFragmentActivity{
    ActionBar mActionBar;
    Button button;
    ViewPager mPager;
    Tab tab;

    String TabFragmentB;

    public void setTabFragmentB(String t){
        TabFragmentB = t;
    }

    public String getTabFragmentB(){
        return TabFragmentB;
    }


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


        mActionBar = getSupportActionBar();
        // Hide Actionbar Icon
        mActionBar.setDisplayShowHomeEnabled(false);
        // Hide Actionbar Title
        mActionBar.setDisplayShowTitleEnabled(false);
        // Create Actionbar Tabs
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        //For ViewPager
        mPager = (ViewPager) findViewById(R.id.pager);

        //Activate FragmentManger
        FragmentManager fm= getSupportFragmentManager();

        ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position){
                super.onPageSelected(position);
                mActionBar.setSelectedNavigationItem(position);//find the viewPager Potision

            }
        };

        mPager.setOnPageChangeListener(ViewPagerListener);
        // Locate the adapter class called ViewPagerAdapter.java
        ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
        // Set the View Pager Adapter into ViewPager
        mPager.setAdapter(viewpageradapter);

        // Capture tab button clicks
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {

            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                // Pass the position on tab click to ViewPager
                mPager.setCurrentItem(tab.getPosition());

            }

            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }
        };

        // Create first Tab
        tab = mActionBar.newTab().setIcon(R.drawable.button_home).setTabListener(tabListener);
        mActionBar.addTab(tab);

        // Create second Tab
        tab = mActionBar.newTab().setIcon(R.drawable.button_browse).setTabListener(tabListener);
        mActionBar.addTab(tab);

        // Create third Tab
        tab = mActionBar.newTab().setIcon(R.drawable.button_downloads).setTabListener(tabListener);
        mActionBar.addTab(tab);


    }


}

My FragmentTab1:

public class FragmentTab1 extends SherlockFragment implements OnClickListener{

    FragmentTab2 fTab2;
    ViewPager viewPager;
    WebView webview;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.home, container, false);
        viewPager = (ViewPager) getActivity().findViewById(R.id.pager);
        webview = (WebView) view.findViewById(R.id.webView1);

        view.findViewById(R.id.Button01).setOnClickListener(this);
        view.findViewById(R.id.Button02).setOnClickListener(this);
        view.findViewById(R.id.Button03).setOnClickListener(this);
        view.findViewById(R.id.Button04).setOnClickListener(this);
        view.findViewById(R.id.Button05).setOnClickListener(this);


        return view;
    }


    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        setUserVisibleHint(true);
    }


    @Override
    public void onClick(View v) {

        switch (v.getId()){
        case R.id.Button01:

            String urlToBeSend = " http://google.com";
            String TabOfFragmentB = ((MainActivity)getActivity()).getTabFragmentB();
            FragmentTab2 fragmentB = (FragmentTab2)getActivity().getSupportFragmentManager().findFragmentByTag(TabOfFragmentB);
            fragmentB.b_updateText(urlToBeSend);

            Toast.makeText(getSherlockActivity(), "url to be send = " +urlToBeSend, Toast.LENGTH_LONG).show();

            viewPager.setCurrentItem(1);

            break;
        case R.id.Button02:
            String urlToBeSend2 = " http://facebook.com";
            String TabOfFragmentB2 = ((MainActivity)getActivity()).getTabFragmentB();
            FragmentTab2 fragmentB2 = (FragmentTab2)getActivity().getSupportFragmentManager().findFragmentByTag(TabOfFragmentB2);
            fragmentB2.b_updateText(urlToBeSend2);
            Toast.makeText(getSherlockActivity(), "url to be send = " +urlToBeSend2, Toast.LENGTH_LONG).show();

            viewPager.setCurrentItem(1);
            break;
        case  R.id.Button03:
            viewPager.setCurrentItem(1);
            break;
        case  R.id.Button04:
            viewPager.setCurrentItem(1);
            break;
        case  R.id.Button05:
            viewPager.setCurrentItem(1);
            break;

        default:
            break;
        }

    }


}

For My FragmentTab2:

public class FragmentTab2 extends SherlockFragment {
    private static WebView webview;
    private ProgressBar progress;

    String homeUrl="http://new3gpmovies.com/";
    private int urlIndex=0;
    String a_url;
    TextView b_received;
    ViewPager viewpager;
    public void b_updateText(String t){
        b_received.setText(t);
        a_url = t;


    }
    public FragmentTab2(){

    }


    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.webview, container, false);

        String myTag = getTag();

        ((MainActivity)getActivity()).setTabFragmentB(myTag);

        b_received = (TextView) view.findViewById(R.id.textView1);



        ImageView backward = (ImageView) view.findViewById(R.id.backward);
        ImageView forward = (ImageView) view.findViewById(R.id.forward);

        backward.setOnClickListener(new OnClickListener(){
            public void onClick(View view){
                if (webview.canGoBack()){
                    webview.goBack();
                }
            }
        });
        forward.setOnClickListener(new OnClickListener(){
            public void onClick(View view){
                if (webview.canGoForward()){
                    webview.goForward();
                }
            }
        });
        webview = (WebView) view.findViewById(R.id.webView1);
        webview.setWebChromeClient(new MyWebChromeClient());
        webview.setWebViewClient(new MyWebViewClient());
        WebSettings settings = webview.getSettings();
        settings.setJavaScriptEnabled(true);

        progress = (ProgressBar) view.findViewById(R.id.progressBar1);
        progress.setMax(100);

        if (a_url != null){
            webview.loadUrl(a_url);
        }else if (a_url == null){

            webview.loadUrl(homeUrl);
        }

        if (progress.getProgress() == 100){
            FragmentTab2.this.progress.setProgress(0);
        }


        return view;
    }


    private class MyWebViewClient extends WebViewClient{

        @SuppressLint({ "InlinedApi", "NewApi" })
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url){
            boolean value = true;  

            if (url.endsWith(".3gp") || url.endsWith(".mp4")){
                Intent downloadIntent = new Intent("com.nanoidea.download.services.IDownloadService");
                downloadIntent.putExtra(MyIntents.TYPE, MyIntents.Types.ADD);
                downloadIntent.putExtra(MyIntents.URL, Utils.url[urlIndex]);
                getActivity().startService(downloadIntent);

                urlIndex++;
                if (urlIndex >= Utils.url.length) {
                    urlIndex = 0;
                }

                value=false;

            }
            if(value){
                view.loadUrl(url);
            }

            return value;  
        }
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){

            webview.loadUrl("file:///android_asset/failedPage.html");
        }
    }


    public String getFileName(String url) {  
        String filenameWithoutExtension = ""; 
        if (url.endsWith("3gp")){

            filenameWithoutExtension = String.valueOf(System.currentTimeMillis()  
                    + ".3gp"); 
        }else if  (url.endsWith(".mp4")){

            filenameWithoutExtension = String.valueOf(System.currentTimeMillis()
                    + ".mp4"); 
        }
        return filenameWithoutExtension;  
    }  

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        setUserVisibleHint(true);

    }   
    private class MyWebChromeClient extends WebChromeClient{

        @Override
        public void onProgressChanged(WebView view, int newProgress){
            FragmentTab2.this.setValue(newProgress);
            super.onProgressChanged(view, newProgress);
        }

    }
    public void setValue(int progress){
        this.progress.setProgress(progress);


    }
    public static boolean canGoBack(){
        return webview.canGoBack();
    }
    public static void goBack(){
        webview.goBack();
    }

}

问题:

为什么当我点击第一个标签中的链接时,第二个标签不会改变?即使第二个标签从第一个标签收到了字符串网址?任何的想法?请指导我。

0 个答案:

没有答案