使用ActionBar.TabListener将数据从一个选项卡传递到另一个选项卡

时间:2013-07-29 19:03:15

标签: java android android-fragments android-tabs

我有mainactivity,其中包含两个标签,并包含以下代码:

public class MainActivity extends Activity {
    private class MyTabListener implements ActionBar.TabListener
    {
        private Fragment mFragment;
        private final Activity mActivity;
        private final String mFrag;

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

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

        }

        @Override
        public void onTabSelected( Tab tab, FragmentTransaction ft )
        {
            mFragment = Fragment.instantiate( mActivity, mFrag );
            ft.add( android.R.id.content, mFragment );
        }

        @Override
        public void onTabUnselected( Tab tab, FragmentTransaction ft )
        {
            ft.remove( mFragment );
            mFragment = null;
        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        ActionBar ab = getActionBar();
        ab.setNavigationMode( ActionBar.NAVIGATION_MODE_TABS );

        Tab tab = ab.newTab()
                .setText( "Current Trip" )
                .setTabListener( 
                        new MyTabListener( this, current.class.getName() ) );
        ab.addTab( tab );

        tab = ab.newTab()
                .setText( "Display Result" )
                .setTabListener( 
                        new MyTabListener( this, display.class.getName() ) );
        ab.addTab( tab );


        File folder = new File(Environment.getExternalStorageDirectory() + "/tc");
        boolean success = true;
        if (!folder.exists()) {
            //Toast.makeText(MainActivity.this, "Directory Does Not Exist, Create It", Toast.LENGTH_SHORT).show();
            success = folder.mkdir();
        }
        if (success) {
            //Toast.makeText(MainActivity.this, "Directory Created", Toast.LENGTH_SHORT).show();
        } else {
            //Toast.makeText(MainActivity.this, "Failed - Error", Toast.LENGTH_SHORT).show();
        }
    }
}

如何传递current.class的edittext数据,以便在display.class中显示并用于计算?

1 个答案:

答案 0 :(得分:1)

我建议您使用共享首选项,例如

this is the frag that "writes":
private SharedPreferences prefs;  // shared preferences 
prefs = getActivity().getSharedPreferences("spa", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = prefs.edit();
editor.putString("someId", "something");  //or you can use putInt, putBoolean ... 
editor.commit();

this is the frag the "reads"
prefs = getActivity().getSharedPreferences("spa", Context.MODE_PRIVATE);
String someId=prefs.getString("someId",someId);

或者你可以从另一个片段中调用一个片段中的a方法(最好通过mainactivity而不是直接来实现)。

 from frag 1:
((activity)getActivity()).somemethod();

 in activity:

 fragment2 fragment = (fragment2) getSupportFragmentManager().findFragmentByTag("fragment2");
 fragment.somemethod();
相关问题