2012-05-11 20 views
5

Lo que necesito para lograr es que en cada Tab Quiero mostrar diferentes sitios web, comoConjunto WebView LoadURL programación que está en la clase fragmento

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

Mi problema es que no puedo acceder al objeto a un WebView LoadURL()

Para aclarar mi pregunta aquí es mi código:

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

has usado LinearLayout como diseño principal en fragments_layout xml –

+0

@NixitPatel, Hola! Agregué el código de verificación fragments_layout para mis ediciones. – jayellos

Respuesta

2

He resuelto este problema. Hice la dinámica de mi Tab usando el siguiente código.

En mi TabsFragment.java agrego una Identificación y conseguir establecer Identificación por 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); 
    } 
} 

Y en PagerAdapter.java * método getItem (posición int) * I crear una nueva instancia de TabsFragment clase y devolver la nueva instancia.

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

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

Funciona perfectamente.

0

el problema creo que es en esta línea

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

necesita modelar toda disposición de vistas en LinearLayout en vez de hacer algo como esto ...

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

esperanza de que ayuda.

0

¿Por qué debe usar Tab? ¿no puedes usar el botón en su lugar?

haga clic en un botón diferente, use webview para cargar las páginas correspondientes.

Deberías saber que es realmente malo para ti tener tres nuevas vistas en tu aplicación.

Cuestiones relacionadas