2012-05-11 9 views
5

Was ich brauche, ist zu erreichen, dass ich in jedem Tab verschiedene Webseiten angezeigt werden soll, wieSets WebView loadURL ist programmatisch, dass in Fragmente Klasse

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

Mein Problem ist, ich nicht das WebView-Objekt einen Zugriff loadURL()

Auf meine Frage, hier ist mein Code zu klären:

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> 
+0

haben Sie LinearLayout als übergeordnetes Layout in fragments_layout xml verwendet –

+0

@NixitPatel, Hi! Ich habe den Code fragments_layout für meine Edits hinzugefügt. – jayellos

Antwort

2

Ich löste dieses Problem. Ich habe das my-Tab mit dem folgenden Code dynamisch gemacht.

In meinem TabsFragment.java ich füge eine id und id von id = 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); 
    } 
} 

Und in PagerAdapter.java * Methode getItem (int position) * I gesetzt bekommen Erstellen Sie eine neue Instanz von TabsFragment und geben Sie die neue Instanz zurück.

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

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

Es funktioniert perfekt.

0

das Problem, das ich denke, ist in dieser Linie

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

Sie ganze Sicht Layout in LinearLayout stattdessen etwas tun werfen ...

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

Hoffnung, dass Hilfe.

0

Warum müssen Sie Tab verwenden? kannst du nicht stattdessen Knopf benutzen?

Klicken Sie auf eine andere Schaltfläche, verwenden Sie Webview, um die entsprechenden Seiten zu laden.

Sie sollten wissen, es ist wirklich schlecht für Sie zu neuen drei Webviews in Ihrer App.

Verwandte Themen