2012-05-11 18 views
5

Những gì tôi cần phải đạt được là trong mỗi Tab Tôi muốn hiển thị các trang web khác nhau, nhưSet WebView loadUrl lập trình đó là trong lớp mảnh

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

Vấn đề của tôi là tôi không thể truy cập các đối tượng WebView để một loadUrl()

Để làm rõ câu hỏi của tôi ở đây là mã của tôi:

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

bạn đã sử dụng LinearLayout làm bố cục gốc trong fragments_layout xml –

+0

@NixitPatel, Xin chào! Tôi đã thêm mã kiểm tra fragments_layout cho Chỉnh sửa của tôi. – jayellos

Trả lời

2

Tôi đã giải quyết được sự cố này. Tôi đã làm cho Tab của mình hoạt động bằng cách sử dụng mã bên dưới.

Trong tôi TabsFragment.java tôi thêm một id và nhận thiết id bởi 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); 
    } 
} 

Và trong PagerAdapter.java * phương pháp GetItem (int position) * Tôi tạo một phiên bản mới của TabsFragment lớp và trả về phiên bản mới.

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

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

Nó hoạt động hoàn hảo.

0

vấn đề tôi nghĩ là trong dòng này

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

bạn đang đúc bố trí toàn bộ quan điểm trong LinearLayout thay vì làm một cái gì đó như thế này ...

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

hy vọng rằng sự giúp đỡ.

0

Tại sao bạn phải sử dụng Tab? bạn không thể sử dụng nút thay thế?

nhấp vào nút khác, bạn sử dụng chế độ xem web để tải các trang tương ứng.

Bạn nên biết, Bạn thực sự không tốt cho ba lần xem web mới trong ứng dụng của mình.

Các vấn đề liên quan