Install the WebView software loadUrl programmatically, which is in the fragment class

What I need is that in each tab I want to display different websites, for example

Tab 1: http://www.stackoverflow.com
Tab 2: http://www.google..com
Tab 3. http://www.developers.android.com

My problem: I cannot access the WebView object to loadUrl ()

To clarify my question here, my code is:

FragmentTabsPagerActivity.java

    public class FragmentTabsPagerActivity extends FragmentActivity implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener{

        private TabHost mTabHost;
        private ViewPager mViewPager;
        private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, FragmentTabsPagerActivity.TabInfo>();
        private PagerAdapter mPagerAdapter;
        ...

        private void initialiseTabHost(Bundle args) {
            mTabHost = (TabHost)findViewById(android.R.id.tabhost);
            mTabHost.setup();

            TabInfo tabInfo = null;
            Bundle bundle1 = new Bundle();
            Bundle bundle2 = new Bundle();
            Bundle bundle3 = new Bundle();

            bundle1.putInt("id", 1);
            bundle2.putInt("id", 2);
            bundle3.putInt("id", 3);

            FragmentTabsPagerActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab1").setIndicator("Tab 1"), (tabInfo = new TabInfo("Tab1", TabsFragment.class, bundle1)));
            FragmentTabsPagerActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab2").setIndicator("Tab 2"), (tabInfo = new TabInfo("Tab2", TabsFragment.class, bundle2)));
            FragmentTabsPagerActivity.addTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab3").setIndicator("Tab 3"), (tabInfo = new TabInfo("Tab3", TabsFragment.class, bundle3)));

            this.mapTabInfo.put(tabInfo.tag, tabInfo);
            mTabHost.setOnTabChangedListener(this);
        }
}

TabsFragment.java

public class TabsFragment extends Fragment{
    LinearLayout layout;
    WebView mWebView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        layout = (LinearLayout)inflater.inflate(R.layout.fragments_layout, container, false);
        mWebView = (WebView) layout.findViewById(R.id.webView1);
        WebSettings setting =mWebView.getSettings();

        mWebView.setWebViewClient(new WebViewClient(){
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return true;
            }
        });

        if(container == null){
            return null;
        }

        return layout;
        }

        public void setWebUrl(String url){
            mWebView.loadUrl(url);
        }
}

Pageradapter.java

public class PagerAdapter extends FragmentPagerAdapter{

    private List<Fragment> fragments;

    public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }
}

EDIT:

fragments_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

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

</LinearLayout>
+5
source share
3 answers

I solved this problem. I made the dynamic dynamics of the Tab using the following code.

In my TabsFragment.java, I add id and get set id onid = getArguments().getInt("id");

public class TabsFragment extends Fragment{
    LinearLayout layout;
    WebView mWebView;
    int id;

    public static TabsFragment newInstance(int id){
        TabsFragment tab = new TabsFragment();
        Bundle args = new Bundle();
        args.putInt("id", id);
        tab.setArguments(args);

        return tab;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        layout = (LinearLayout)inflater.inflate(R.layout.fragments_layout, container, false);
        mWebView = (WebView) layout.findViewById(R.id.webView1);
        WebSettings setting =mWebView.getSettings();

        mWebView.setWebViewClient(new WebViewClient(){
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return true;
            }
        });

        if(container == null){
            return null;
        }

        return layout;
    }


    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        if(savedInstanceState != null){
            id = savedInstanceState.getInt("id");
        }else{
            id = getArguments().getInt("id");
        }

        Log.w("id", id+"");

        switch (id) {
        case 1:
            setWebUrl("http://www.stackoverflow.com");
            break;
        case 3:
            setWebUrl("http://www.google..com");
            break;
        case 2:
            setWebUrl("http://www.developers.android.com");
            break;

        default:
            break;
        }
    }

    public void setWebUrl(String url){
        mWebView.loadUrl(url);
    }
}

PagerAdapter.java * getItem (int position) * TabsFragment .

@Override
    public Fragment getItem(int position) {
        TabsFragment tab = TabsFragment.newInstance(position+1);

        //return this.fragments.get(position);
        return tab;
    }

.

+2

, ,

layout = (LinearLayout)inflater.inflate(R.layout.fragments_layout, container, false);

LinearLayout - ...

View v = inflater.inflate(R.layout.fragments_layout, container, false);
mWebView = (WebView) v.findViewById(R.id.webView1);
...
return v

, .

0

Why should you use Tab? Can't you use a button instead?

click on another button, you use webview to load the corresponding pages.

You should know this is really bad for you in the new three web reviews in your application.

0
source

All Articles