android - 从 ActionBar 选项卡获取当前 fragment

标签 android android-fragments android-actionbar

我有两个 fragment (Fragment1 和 Fragment2),使用自定义 TabListener 类创建了 ActionBar 导航。每个选项卡的内容都是我的 fragment 之一。但现在我遇到了一个问题 - 我无法访问/获取 fragment 的实例。

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 ),因为我没有 id 我也试过 getSupportFragmentManager().findFragmentByTag( tag ) 但它也没有用,因为我只调用 add() 方法 FragmentTransaction 类而不是 replace()

是否有任何方法可以获取当前选项卡 fragment 实例以便调用 fragment 的方法?

最佳答案

我找到了一个解决方案。我试图在 onActivityResult() 方法中获取 fragment 的实例,这确实有效。

 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();
        }
    }

关于android - 从 ActionBar 选项卡获取当前 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14351573/

相关文章:

安卓应用结构

android - 使用 Snackbar.Callback 进行撤消删除操作

android - 如何启用拆分操作栏?

android - 如何减少android中自定义操作栏中图标和主页键之间的空间

android - 我怎样才能设置文本的位置?

android - 在协程范围内调用时启动未执行

android - phonegap/cordova filewriter 和 reader 不工作

android - 在 Android WebView 中捕获按键事件

Android Activity fragment 较多,生命周期变化的正确处理方式?

android - 如何在android操作栏的菜单项中添加图标?