我有FragmentActivity
我在其中制作片段:
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;
}
}
我现在遇到的问题是,如果屏幕旋转,适配器会丢失BasicData1Fragment
上的实例,换句话说,我在getItem
中保存的适配器中的片段为空。
我该如何解决这个问题?
编辑: 当我使用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);
}
}
答案 0 :(得分:0)
将android:configChanges =“orientation | keyboardHidden | screenSize”添加到清单文件中的活动标签。这将在定向时保留数据。希望这会对你有帮助:)