SwipeTabs Android后的ImageView更改

时间:2016-12-28 02:47:01

标签: java android android-fragments

拍摄照片和签名后,它会显示在ImageView上。但是,在我交换选项卡后,ImageView将返回其默认图像。看我的截图。

sample image- screenshot

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

1 个答案:

答案 0 :(得分:1)

当您在TabLayout中滑动选项卡(实际上是片段)时,默认行为是系统将前一个Fragment杀死以释放内存,后续片段将被加载到内存中。

现在,您的代码发生了类似的事情。在第3个选项卡(CaptureSignatureFragment)中加载照片和签名然后在选项卡中滑动时,CaptureSignatureFragment将被终止,因此两个ImageView都将默认图像设置为它们。

如果您希望即使在更改标签后仍保持第3个标签中的数据完整,您最好将ViewPager的offscreen limit设置为4(您拥有的标签数量):

viewPager.setOffscreenPageLimit(4)

现在,更改标签不会杀死任何fragments。但是,这样做可能会产生性能问题。