【问题标题】:How can I clear Fragments of ViewPager如何清除 ViewPager 的 Fragments
【发布时间】:2017-03-03 07:26:01
【问题描述】:

我有 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();
    }
}

【问题讨论】:

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


    【解决方案1】:

    点击抽屉时,尝试在ViewPagerAdapter 中将imagesList 更改为新的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多