2013-07-29 2 views
0

У меня есть mainactivity, который содержит две вкладки и имеет следующий код:Передача данных из одной вкладки в другую, используя ActionBar.TabListener

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

Как передать данные в EditText от current.class будут показаны, а также используется в display.class для расчета?

ответ

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

В качестве альтернативы вы можете вызвать метод в одном фрагменте из другого (это лучше всего сделать это с помощью mainactivity, а не напрямую).

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

in activity: 

fragment2 fragment = (fragment2) getSupportFragmentManager().findFragmentByTag("fragment2"); 
fragment.somemethod(); 
+0

Пример общих префов? Пойдет ли он в MainActivity? Как очистить его? – Si8

+0

Для вашего первого предложения, в каком коде я помещаю вкладку на один класс и какой код на вкладке два класса? – Si8

+0

В некоторых примерах я добавил. Я набросал эти голые кости - но лучше, если вы сейчас немного поработаете и превратите это в решение. – IanB

Смежные вопросы