拍摄照片和签名后,它会显示在ImageView
上。但是,在我交换选项卡后,ImageView
将返回其默认图像。看我的截图。
当editText
输入值仍然存在时,没有问题。但是,ImageView
是我的问题。是什么导致了这个问题?我该如何解决这个问题?
代码:
public class RegisterUser extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.activity_register_user,container,false);
// Setting ViewPager for each Tabs
ViewPager viewPager = (ViewPager) v.findViewById(R.id.viewpager);
setupViewPager(viewPager);
// Set Tabs inside Toolbar
TabLayout tabs = (TabLayout) v.findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager);
// Create Navigation drawer and inlfate layout
return v;
}
// Add Fragments to Tabs
private void setupViewPager(ViewPager viewPager) {
Adapter adapter = new Adapter(getChildFragmentManager());
adapter.addFragment(new ListContentFragment(), "Info 1");
adapter.addFragment(new TileContentFragment(), "info 2");
adapter.addFragment(new CaptureSignatureActivity(), "info 3");
adapter.addFragment(new CardContentFragment(), "info 4");
viewPager.setAdapter(adapter);
}
static class Adapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public Adapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
答案 0 :(得分:1)
当您在TabLayout中滑动选项卡(实际上是片段)时,默认行为是系统将前一个Fragment
杀死以释放内存,后续片段将被加载到内存中。
现在,您的代码发生了类似的事情。在第3个选项卡(CaptureSignatureFragment)中加载照片和签名然后在选项卡中滑动时,CaptureSignatureFragment
将被终止,因此两个ImageView都将默认图像设置为它们。
如果您希望即使在更改标签后仍保持第3个标签中的数据完整,您最好将ViewPager的offscreen limit
设置为4(您拥有的标签数量):
viewPager.setOffscreenPageLimit(4)
现在,更改标签不会杀死任何fragments
。但是,这样做可能会产生性能问题。