如何清除ViewPager的碎片

时间:2017-03-03 07:26:02

标签: android android-fragments android-viewpager fragment viewpagerindicator

我有3张不同的专辑,每张专辑有20张图片。

当我更改相册(点击抽屉)时,图像源会发生变化。但是在进行搜索时我可以看到以前的专辑图像。

有没有办法清除碎片

MainActivity.java:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        images = new ArrayList<>();

        //find view by id
        viewPager = (ViewPager) findViewById(R.id.view_pager);
        setImagesData();

        // init viewpager adapter and attach
        adapter = new ViewPagerAdapter(getSupportFragmentManager(), images);
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(adapter.getCount() - 1); //viewpager right to left

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

 }

以下是更改资源的方法:

@SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {

        images.clear(); // Always clear
        List<Integer> newImages=new ArrayList<>();

        int id = item.getItemId();
            if (id == R.id.nav_album1) {
                newImages = Arrays.asList(
                        R.mipmap.p1, R.mipmap.p2, R.mipmap.p3, R.mipmap.p4, R.mipmap.p5);
            } else if (id == R.id.nav_album2) {
                newImages = Arrays.asList(
                        R.mipmap.r1, R.mipmap.r2, R.mipmap.r3, R.mipmap.r4, R.mipmap.r5);
            } else if (id == R.id.nav_cevsen) {
            }

        images.addAll(newImages);
        adapter.notifyDataSetChanged(); // always notify
        viewPager.setCurrentItem(adapter.getCount() - 1); //viewpager right to left

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

PageFragment.java:

public class PageFragment extends Fragment {

    private int imageResource;
    private Bitmap bitmap;

    public static PageFragment getInstance(int resourceID) {
        PageFragment f = new PageFragment();
        Bundle args = new Bundle();
        args.putInt("image_source", resourceID);
        f.setArguments(args);
        return f;
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        imageResource = getArguments().getInt("image_source");


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.album1, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ImageView imageView = (ImageView) view.findViewById(R.id.image);

        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inSampleSize = 0;
        o.inDither = false;
        bitmap = BitmapFactory.decodeResource(getResources(), imageResource, o);
        imageView.setImageBitmap(bitmap);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        bitmap.recycle();
        bitmap = null;
    }
}

ViewPagerAdapter.Java

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    private List<Integer> images;


    public ViewPagerAdapter(FragmentManager fm, List<Integer> imagesList) {

        super(fm);
        this.images = imagesList;
    }

    @Override
    public Fragment getItem(int position) {
        return PageFragment.getInstance(images.get(position));

    }


    @Override
    public int getCount() {
        return images.size();
    }
}

1 个答案:

答案 0 :(得分:0)

点击抽屉时,尝试使用imagesList中的新ViewPagerAdapter更改{{1}}。