2013-01-16 12 views
5

私は2つのフラグメント(Fragment1とFragment2)を持ち、カスタムTabListenerクラスでActionBarナビゲーションを作成しました。各タブのコンティニュアントは私の断片の一つです。しかし今は問題があります。フラグメントのインスタンスにアクセス/取得できません。ActionBarタブから現在のフラグメントを取得

public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().setNavigationMode(getSupportActionBar().NAVIGATION_MODE_TABS); 

     Tab tab = getSupportActionBar().newTab() 
      .setText(R.string.frag1) 
      .setTabListener( 
       new MyTabListener(this, 
        Fragment1.class.getName())); 
     getSupportActionBar().addTab(tab); 

     tab = getSupportActionBar().newTab() 
      .setText(R.string.frag2) 
      .setTabListener( 
       new MyTabListener(this, 
        Fragment2.class.getName())); 
     getSupportActionBar().addTab(tab); 

     Fragment1 f1 = (Fragment1) getSupportFragmentManager().findFragmentByTag("FRAG1"); 
     if(f1 != null) { 
      Toast.makeText(this, "It's not empty", Toast.LENGTH_SHORT).show(); 
     } 
    } 


    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Toast.makeText(this, "Photo Intent Goes Here", Toast.LENGTH_SHORT).show(); 

     if(data != null) { 
      Toast.makeText(this, "It's not empty", Toast.LENGTH_SHORT).show(); 

      if (resultCode == RESULT_OK) { 


       } 

     } else { 
      Toast.makeText(this, "It's empty", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    private class MyTabListener implements TabListener 
    { 
     private SherlockFragment mFragment; 
     private final Activity mActivity; 
     private final String mFragName; 

     public MyTabListener(Activity activity, 
      String fragName) 
     { 
      mActivity = activity; 
      mFragName = fragName; 
     } 


     @Override 
     public void onTabSelected(Tab tab, 
       android.support.v4.app.FragmentTransaction ft) { 
      mFragment = (SherlockFragment) SherlockFragment.instantiate(mActivity, 
        mFragName); 

      if(mFragment instanceof Fragment1) { 
       Fragment1 f1temp = (Fragment1) mFragment; 

       //Toast.makeText(mActivity, "Frag1", Toast.LENGTH_SHORT).show(); 

        ft.add(android.R.id.content, mFragment,"FRAG1"); 
      } 

      else { 
        ft.add(android.R.id.content, mFragment,"ELSE"); 
      } 


      //Toast.makeText(mActivity, mFragName, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onTabUnselected(Tab tab, 
       android.support.v4.app.FragmentTransaction ft) { 
      ft.remove(mFragment); 
      mFragment = null; 

     } 

     public SherlockFragment getCurrentFragment() { 
      return mFragment; 
     } 

     @Override 
     public void onTabReselected(Tab tab, 
       android.support.v4.app.FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 

    } 

私は、私も何のIDを持っていないので、私はgetSupportFragmentManager().findFragmentByTag(tag)試してみました、getSupportFragmentManager().findFragmentById(id)を使用することはできませんが、それは私だけadd()方法FragmentTransactionクラスを呼び出すためではないreplace()

は、それがどのような方法のいずれかです動作しませんでしたフラグメントのメソッドを呼び出せるように、現在のタブフラグメントインスタンスを取得しますか?

+0

は、あなたがやろうとしているものを良く説明し、あなたは2つの断片を持っている、だから、各フラグメントのクラスのメソッドを作成する方法を知りたいですか? – Marckaraujo

+0

フラグメントのインスタンスを取得したい、フラグメントのメソッドをコールしたり、いくつかの変数などを渡したりすることができます。 –

答えて

5

解決策が見つかりました。 onActivityResult()メソッドでフラグメントのインスタンスを取得しようとしましたが、実際には機能しました。

public void onActivityResult(int requestCode, int resultCode, Intent data) { 

Toast.makeText(this, "Photo Intent Goes Here", Toast.LENGTH_SHORT).show(); 

     if(data != null) { 
      Toast.makeText(this, "It's not empty", Toast.LENGTH_SHORT).show(); 

      if (resultCode == RESULT_OK) { 
        Fragment1 f1 = (Fragment1) getSupportFragmentManager().findFragmentByTag("FRAG1"); 
        f1.onCameraResult(requestCode,resultCode,data); // Your method of the fragment 

       } 

     } else { 
      Toast.makeText(this, "It's empty", Toast.LENGTH_SHORT).show(); 
     } 
    } 
+6

コード内でフラグメントID(FRAG1)を割り当てましたか? – dannyroa

+0

'FragmentTransaction.add(Fragment、String)'または 'FragmentTransaction.replace(int、Fragment、String)'を呼び出すときにFragmentのタグを設定します。タグは 'String'パラメータです。 – ashishduh

0

私はFragmentPagerAdapterインスタンスからのフラグメントを得る:

FragmentPagerAdapter adapter = (FragmentPagerAdapter) viewPager.getAdapter(); 
Fragment fragment = adapter.getItem(tabLayout.getSelectedTabPosition()); 
関連する問題