2012-05-11 8 views
5

フラグメントのクラスである私の問題は、私はWebViewのオブジェクトにアクセスすることはできませんですloadUrl()設定WebViewのloadUrlは、プログラムそれは私が達成するために必要なの</p> <pre><code>Tab 1: http://www.stackoverflow.com Tab 2: http://www.google..com Tab 3. http://www.developers.android.com </code></pre> <p>のように、すべてのタブでは、私は別のウェブサイトを表示したいということです

ここに私の質問を明確にするためには、私のコードです:

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

fragments_layout xmlでLinearLayoutを親レイアウトとして使用しました –

+0

@NixitPatel、こんにちは!フラグメントのコードを追加しました。私の編集を確認してください。 – jayellos

答えて

2

私はこの問題を解決しました。私は下のコードを使用して私のタブを動的にしました。私TabsFragment.java

私はIDを追加し、PagerAdapter.java * 方法のgetItem(int型の位置)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); 
    } 
} 

によってそしてIDを設定してもらう* I TabsFragmentクラスの新しいインスタンスを作成し、新しいインスタンスを返します。

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

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

これは完全に機能します。

0

私が思う問題は...このライン

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

なぜタブを使用する必要がありますか?代わりにボタンを使用することはできませんか?

別のボタンをクリックすると、対応するページを読み込むためにwebviewが使用されます。

あなたが知っておくべきことは、新しい3つのWebビューがあなたにとって本当に悪いことです。

関連する問題

 関連する問題