簡體   English   中英

如何從另一個 AppCompatActivity 類加載片段中的 WebView URL

[英]How can i load WebView URL in fragment from another AppCompatActivity class

我正在為“帶滑動選項卡的抽屜”創建項目。 我在片段中使用了一個 webview,我想從另一個 AppCompatActivity 加載 Webview URL。 我該怎么做?

片段類:

public class SocialFragment extends Fragment {

    ProgressBar pb_per;
    public WebView mWebView;
    View view;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.social_layout, container, false);

        pb_per = (ProgressBar) view.findViewById(R.id.progressBar_book1);
        mWebView = (WebView) view.findViewById(R.id.web_book1); //This is the id you gave for webview

        //--------------------------- to over ride keyboard error ------(1)
        mWebView.setWebViewClient(new myWebClient());
        mWebView.getSettings().setJavaScriptEnabled(true);
        //--------------------------------------------------

        mWebView.getSettings().setSupportZoom(true);       //Zoom Control on web (You don't need this
        //if ROM supports Multi-Touch
        mWebView.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM
        mWebView.setBackgroundColor(Color.parseColor("#FFFFFF"));
        mWebView.getSettings().setUseWideViewPort(true);
        mWebView.getSettings().setLoadWithOverviewMode(false);

        // Load URL
        mWebView.loadUrl("http://www.twitter.com");
        mWebView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    WebView webView = (WebView) v;

                    switch (keyCode) {
                        case KeyEvent.KEYCODE_BACK:
                            if (webView.canGoBack()) {
                                webView.goBack();

                                return true;
                            }
                            break;
                    }
                }

                return false;
            }
        });

        return view;
    }

    //===================================================================
    public class myWebClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub
            pb_per.setVisibility(View.VISIBLE);
            //  multi_per.setVisibility(ProgressBar.GONE);

            view.loadUrl(url);

            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            pb_per.setVisibility(View.GONE);
            //  multi_per.setVisibility(ProgressBar.VISIBLE);
        }
    }
}

TabFragment.Java 類

public class TabFragment extends Fragment {

    public static TabLayout tabLayout;
    public static ViewPager viewPager;
    public static int int_items = 2;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /**
         *Inflate tab_layout and setup Views.
         */
            View x =  inflater.inflate(R.layout.tab_layout,null);
            tabLayout = (TabLayout) x.findViewById(R.id.tabs);
            viewPager = (ViewPager) x.findViewById(R.id.viewpager);

        /**
         *Set an Apater for the View Pager
         */
        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        /**
         * Now , this is a workaround ,
         * The setupWithViewPager dose't works without the runnable .
         * Maybe a Support Library Bug .
         */

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                    tabLayout.setupWithViewPager(viewPager);
                   }
        });

        return x;

    }

    class MyAdapter extends FragmentPagerAdapter{

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


       // Return fragment with respect to Position .


        @Override
        public Fragment getItem(int position)
        {
          switch (position){
              case 0 : return new PrimaryFragment();
              case 1 : return new SocialFragment();

          }
        return null;
        }

        @Override
        public int getCount() {

            return int_items;

        }

       // This method returns the title of the tab according to the position.


        @Override
        public CharSequence getPageTitle(int position) {

            switch (position){
                case 0 :
                    return "Facebook";
                case 1 :
                    return "Twitter";
            }
                return null;
        }
    }

}

AppCompatActivity 類:

public class MainActivity extends AppCompatActivity {
    DrawerLayout mDrawerLayout;
    NavigationView mNavigationView;
    FragmentManager mFragmentManager;
    FragmentTransaction mFragmentTransaction;

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

        // Setup the DrawerLayout and NavigationView
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
        mNavigationView = (NavigationView) findViewById(R.id.shitstuff);

        // Lets inflate the very first fragment
        // Here , we are inflating the TabFragment as the first Fragment
        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.containerView, new TabFragment()).commit();

        // Setup click events on the Navigation View Items.
        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                mDrawerLayout.closeDrawers();


                if (menuItem.getItemId() == R.id.nav_item_sent) {
                    //###############################From Here I Call WEBVIEW URL #######################
                    SocialFragment.mWebView.loadUrl("http://www.busindia.com/busindia_TNSTC.jsp");
                }

                if (menuItem.getItemId() == R.id.nav_item_inbox) {
                    FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
                    xfragmentTransaction.replace(R.id.containerView, new TabFragment()).commit();
                }

                return false;
            }
        });

        // Setup Drawer Toggle of the Toolbar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        ActionBarDrawerToggle mDrawerToggle
                = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.app_name, R.string.app_name);

        mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerToggle.syncState();
    }
}

我試過@cprakashagr給定解決方案但出現錯誤見下圖

查看錯誤截圖

使用 localBroadCastManager

網頁瀏覽活動

    @Override
        protected void onPause() {
                // Unregister since the activity is paused.
                LocalBroadcastManager.getInstance(this).unregisterReceiver(
                        mWebViewLoader);
                super.onPause();
            }

            @Override
            protected void onResume() {
                // Register to receive messages.
                // We are registering an observer (mWebViewLoader) to receive Intents
                // with actions named "WebView".
                LocalBroadcastManager.getInstance(this).registerReceiver(
                        mWebViewLoader, new IntentFilter("WebView"));
                super.onResume();
            }

            // Our handler for received Intents. This will be called whenever an Intent
            // with an action named "WebView" is broadcasted.
            private BroadcastReceiver mWebViewLoader = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    mWebView.post(new Runnable() {
                @Override
                public void run() {
                    mWebView.loadUrl("http://google.com");
                      }
                });


                }
            };

調用活動

LocalBroadcastManager.getInstance(JobDetailScreen.this).sendBroadcast(new Intent("WebView"));

這對我有用 謝謝你讓我幫忙

 SocialFragment.mWebView.post(new Runnable() {


                         public void run() {
                             SocialFragment.mWebView.loadUrl("http://www.busindia.com/busindia_TNSTC.jsp");
                         }
                     });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM