2014-01-27 4 views
-1

Как я новичок в андроид я застрял в какой-то момент в процессе реализации ActionBarTab с swipable ViewPager с использованием фрагментовКак передать фрагмент в MainActivity в android?

У меня есть 3 вкладки, каждая с некоторыми элементами управления последняя вкладка будет представлять все данные вкладки в одну таблицу я перемещаться по следующей кнопка и события изменения вкладка

с помощью следующей вкладки я могу установить данные в объект класса с помощью геттер/сеттер и я представить, что данные класса в таблице БД для сохранения ..

теперь я хочу назвать тот же метод а на вкладке изменение событие способ SetdataToModelClass()

Как назвать тот же метод на событие изменения вкладки, которые уже называют на события нажатия кнопки, так что если пользователь перемещаться по вкладкам вместо следующей кнопки и изменить какие-либо данные Мой SetdataToModelClass() называется

SetdataToModelClass в каждом фрагменте, где, как мое событие изменения Tab находится в классе MainFragmentActivity так как вызвать SetdataToModelClass() метод на событие изменения вкладки (т.е. хотите иметь связь между MainFragment Act & фрагмент)

Код для MainActivity класса здесь:

public class TestFragmentTabHost extends FragmentActivity implements TabListener { 
ViewPager vp; 
ActionBar ab; 
SalesActivity sa = new SalesActivity(); 
SessionManager session = null; 
String usrNm = null;  
String szImeiId = null; 
Spinner spnAECust; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tabhost_act); 

    /* Action Bar Color change on create*/ 
    ActionBar actionBar = getActionBar(); 
    ActionBarColor.setBackgroundColor(actionBar); 
    getActionBar().setDisplayHomeAsUpEnabled(true);  
    getActionBar().setTitle(Html.fromHtml("<font color=\"white\" face=\"verdana,arial\">" + getString(R.string.air) + "</font>")); 

    // Session Manager 
    session = new SessionManager(getApplicationContext()); 

    /* To Get Unique Device id */ 
    TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
    szImeiId = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE. 

    // get User Details from Session 
    HashMap<String, String> hashMap = new HashMap<String, String>(); 
    hashMap = session.getUserDetails(); 
    usrNm = hashMap.get(SessionManager.KEY_USRNM);  

    vp = (ViewPager) findViewById(R.id.pager); 
    vp.setAdapter(new MyPageAdapter(getSupportFragmentManager())); 

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

    ActionBar.Tab tab1 = ab.newTab(); 
    tab1.setText("INFO"); 
    tab1.setTabListener(this); 

    ActionBar.Tab tab2 = ab.newTab(); 
    tab2.setText("PORT"); 
    tab2.setTabListener(this); 


    ActionBar.Tab tab3 = ab.newTab(); 
    tab3.setText("PACKAGES"); 
    tab3.setTabListener(this); 

    ab.addTab(tab1); 
    ab.addTab(tab2); 
    ab.addTab(tab3);   

} 

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

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    vp.setCurrentItem(tab.getPosition()); 

} 

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

// For Page adapter 
class MyPageAdapter extends FragmentPagerAdapter { 

    public MyPageAdapter(FragmentManager fm) { 
     super(fm); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     Fragment frgmnt = null; 
     if (arg0 == 0) { 
      frgmnt = new InfoFragment();      
     }else if (arg0 == 1) { 
      frgmnt = new PortFragment(); 
     }else if (arg0 == 2) { 
      frgmnt = new PackagesFragment(); 
     } 
     return frgmnt; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 3; 
    } 

} 




public void setSalesInfoData(List<String> sales) {  
     while (sales.size() > 0) {     
      sa.setCustomerId(Integer.parseInt(sales.get(0).toString())); 
      sa.setProspectId(Integer.parseInt(sales.get(1).toString())); 
      sa.setCommodityId(Integer.parseInt(sales.get(2).toString())); 
      sa.setSpecialNotes(sales.get(3)); 
      sa.setLob(sales.get(4)); 
      DateFormat dt = new DateFormat(); 
      Date crTs = dt; 
      sa.setCrTs(crTs); 
      sa.setCrUsr(usrNm);   
      sa.setDeviceId(szImeiId); 
      break; 
     } 

    } 

используя метод УстановитьДанные к классу SalesActivity

+0

вы должны использовать интерфейс в качестве обратного вызова к деятельности. проверить связь с активностью @ http://developer.android.com/guide/components/fragments.html – Raghunandan

+0

, лучшим способом всегда будет использование интерфейса, например, предложенного Р.Рагунанданом. Но вы также можете просто получить ссылку на свою деятельность во Фрагменте и вызвать на нем свою функцию. для получения дополнительной информации: http://stackoverflow.com/questions/21252503/android-how-to-access-a-getter-method-in-parent-activity-from-fragment/21252529#21252529 –

+0

aditi последний раз, когда я сказал u abt singleton класс у вас прочитал этот класс дорогой –

ответ

2

изменение адаптер:

class MyPageAdapter extends FragmentPagerAdapter { 
    Fragment[] fragments=new Fragment[3]; 

    public MyPageAdapter(FragmentManager fm) { 
     super(fm); 
     fragments[0]= new InfoFragment();      
     fragments[1]= new PortFragment(); 
     fragments[2]= new PackagesFragment(); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     return fragments[arg0]; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 3; 
    } 
} 

И в onTabUnselected получить фрагмент вызова функции ех:

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    Fragment fragment=adapter.getItem(tab.getPosition()); 
    if(fragment instanceof InfoFragment){ 
     ((InfoFragment)fragment).SetdataToModelClass(); 
    } 
    if(fragment instanceof PortFragment){ 
     ((PortFragment)fragment).SetdataToModelClass(); 
    } 
    if(fragment instanceof PackagesFragment){ 
     ((PackagesFragment)fragment).SetdataToModelClass(); 
    } 
} 

сделать также объект адаптера переменная класса ex:

ontside onCreate

MyPageAdapter adapter; 

в onCreate

adapter=new MyPageAdapter(getSupportFragmentManager()); 
vp.setAdapter(adapter); 
+0

проверить мое редактирование. дайте мне знать, если не работает –

+0

i can not access SetdataToModelClass(); adapter.getItem (tab.getPosition()).SetdataToModelClass(); –

+0

проверить мои измененные ан. это должно работать, но лучшим способом было бы создать интерфейс с SetdataToModelClass и заставить все фрагменты реализовать этот интерфейс и просто набирать cast в Interface и вызывать SetdataToModelClass. –

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