2013-01-16 5 views
5

У меня есть два фрагмента (Fragment1 и Fragment2), созданные навигация ActionBar с пользовательским классом TabListener. Континент каждой вкладки является одним из моих фрагментов. Но теперь у меня есть проблема - я не могу получить доступ к экземплярам фрагмента.Получить текущий фрагмент из вкладки 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 

     } 

    } 

я не могу использовать getSupportFragmentManager().findFragmentById(id), потому что у меня нет идентификатора и я попытался getSupportFragmentManager().findFragmentByTag(tag), но это не сработало, потому что я только называю 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

Где в коде был указан идентификатор фрагмента (т. Е. FRAG1)? – dannyroa

+0

Вы устанавливаете тег фрагмента, когда вы вызываете 'FragmentTransaction.add (Fragment, String)' или 'FragmentTransaction.replace (int, Fragment, String)', где тег является параметром 'String'. – ashishduh

0

я получаю фрагмент из FragmentPagerAdapter Например:

FragmentPagerAdapter adapter = (FragmentPagerAdapter) viewPager.getAdapter(); 
Fragment fragment = adapter.getItem(tabLayout.getSelectedTabPosition()); 
Смежные вопросы