2016-04-05 25 views
0

現在、主なアクティビティのカードを介してjsonファイルを表示するアプリケーションを開発中です。私のタブ付きアクティビティで現在選択されているタブに応じて、jsonファイルをダウンロードするメソッドによって、ダウンロードするjsonファイルが決まります(整数を渡し、メソッドにスイッチがあります)。 getItem、同様にgetCount、およびgetPageTitle:タブ付きアクティビティの現在選択されているタブを取得する

Fragment.Downloadjson(rootview,integer,context); 

さて、私のタブ付きアクティビティのために、私は通常のものを持っているSectionsPagerAdapterを持っています。ここでは

は方法です。

はのgetItemに私は私の新しいフラグメントを作成しています:

@Override 
     public Fragment getItem(int position) { 
      View v1 = getWindow().getDecorView().getRootView(); 
      switch (position) { 
       case 0: 
        //Fragment.Download(v1,0,getApplicationContext()); 
        return new Fragment().f(Fragment.page.TODAY); 
       case 1: 
        //Fragment.Download(v1,1,getApplicationContext()); 
        return new Fragment().f(Fragment.page.TOMORROW); 
       default: 
        return new Fragment(); 
      } 
     } 

例外:それはで動作するので、私は、私の方法でrootviewパラメータであることを、このエラーの原因を発見した

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 

私はそれを定義するので、パラメータとしてrootViewとonCreateView。声明現在選択されているタブのためか、現在はそこフラグメントを表示する場合

A)私は現在選択されているタブ

Bを取得する方法を知らないのでHovewerは、私はそれはわからない)、することはできません私はタブを切り替えた後、結局、IfステートメントだからonCreateView

になりますので、再度、JSONファイルをダウンロードするでしょう、私の質問はどのように私はこれを解決するのです、

のですか?

+0

このリンクをクリックすると現在のタブが表示されます。http://stackoverflow.com/questions/3583405/get-index-of-selected-tab-in-tabhost –

+0

@BrahmamYamani私はタブアビリティがありません。アンドロイドスタジオから_タップされた活動_そのため、Tabhostは使用できません。 –

答えて

1

getItem()の方法ではしないでください。 getItemではフラグメントを作成するだけです。

@Override 
public Fragment getItem(int position) { 
    switch (position) { 
     case 0: 
      return new MyFragment0(); 
     case 1: 
      return new MyFragment1(); 
     case 2: 
      return new MyFragment2(); 
    } 
    return null; 
} 

オーバーライドメソッドinstantiateItem、そこにフラグメントのマップとその位置をキープ:

private ArrayMap<Integer, MyFragmentBaseClass> mPagerFragmentMap = new ArrayMap<>(); 


    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     MyFragmentBaseClass fragment = (MyFragmentBaseClass) super.instantiateItem(container, position); 
     mPagerFragmentMap.put(position, fragment); 

     return fragment; 
    } 

ノートMyFragmentBaseClassは、すべての断片が実装マーカーインターフェイスすることができます。

上記のコードでは、既に各フラグメントをそのタブにマップできます。

あなたは今setOnTabSelectedListenerを使用してリスナーを設定し、ユーザーが選択したときに知っているために、その方法onTabSelectedのいずれかを使用することができますTabLayoutを使用している場合は、そのタブとしたい任意の操作を行います。

+0

私はTablayoutを持っていないのですか? –

+1

それは異なります。あなたはタブを実装するために何を使用していますか?必要なのは、タブの選択を検出できることだけです。 –

+0

廃止されたTablistenerと廃止予定のすべてのタブメソッド(新しいアクティビティを作成するときは、「タブ付きアクティビティ」プリセットがあります。このinstantiateitemは現在のフラグメントを返すので、私はタブを変更するときに何かする何らかのメソッドが必要です。それ、どうやったら出来るの? –

関連する問題