我有一個FragmentActivity
中,我讓我的片段:TabsPagerAdapter屏幕方向失去實例
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
String[] tabs = {
getResources().getString(R.string.loginData),
getResources().getString(R.string.firmData)
};
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
我創建2個片段,並在這兩個我對這個表格的形式和驗證。在第二個片段上,我保存了button
** **第一個片段的**觸發驗證*並獲得結果。
這是我的適配器:
public class TabsPagerAdapter extends FragmentPagerAdapter {
private BasicData1Fragment fragment;
public TabsPagerAdapter(FragmentManager fm)
{
super(fm);
}
public void validateBasicData1Fragment()
{
if(fragment != null)
{
fragment.validationCheck();
}
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
fragment = new BasicData1Fragment(); //shranimo si referenco na fragment 1, da lahko kaseneje poklicemo metodo
return fragment;
case 1:
// Games fragment activity
return new BasicData2Fragment();
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 2;
}
}
我現在的問題是,如果屏幕旋轉適配器,我在getItem
保存爲空適配器換句話說片段失去對BasicData1Fragment
實例。
我該如何解決這個問題?
編輯: 當我使用setRetainInstance(true); 問題得到了解決,但另一個問題出現了。 如果我改變方向,我的驗證會停止工作。
然後,我通過在oncreate中創建editviews一次(使用setRetainInstance(true))來修正驗證,但之後我再次丟失了實例。
輸入驗證碼:
public void validationCheck()
{
if(loginFirstName.getText() == null || loginFirstName.getText().toString().isEmpty())
{
loginFirstName.setError(getString(R.string.requiredErrorMessage, getString(R.string.firstName)));
errors[0] = true;
}
else
{
loginFirstName.setError(null);
errors[0] = false;
}
if(loginLastName.getText() == null || loginLastName.getText().toString().isEmpty())
{
loginLastName.setError(getString(R.string.requiredErrorMessage, getString(R.string.lastName)));
errors[1] = true;
}
else
{
loginLastName.setError(null);
errors[1] = false;
}
if(username.getText() == null || username.getText().toString().isEmpty())
{
username.setError(getString(R.string.requiredErrorMessage, getString(R.string.username)));
errors[2] = true;
}
else
{
username.setError(null);
errors[2] = false;
}
//ce je geslo prazno ->nobenega errorja
if(password.getText().toString().isEmpty())
{
errors[3] = false;
errors[4] = false;
Global.LoginRequired = false;
password.setError(null);
}
else if(!password.getText().toString().isEmpty()) //ce ni prazno, mora obstajati tudi potrditev, ki seujema
{
if(!password.getText().toString().equals(passwordConfirm.getText().toString()))
{
passwordConfirm.setError(getString(R.string.passwordsDoesntMatch));
errors[4] = true;
}
else
{
errors[3] = false;
errors[4] = false;
Global.LoginRequired = true;
passwordConfirm.setError(null);
}
}
使這些片段爲setRetainInstance(true);那麼你可以使用相同的片段實例,即使在屏幕上更改爲 – San 2014-11-03 09:38:21
我試過,但有其他問題。我編輯了我的問題與結果。 – 2014-11-03 10:47:33
不要在getItem中創建片段,創建片段,列表並通過適配器構造函數傳遞 – San 2014-11-03 10:56:24