我有4张专辑,每张专辑有20张图片。作为默认首张专辑图片加载。我想在图像之间切换。我使用viewpager进行滑动,但我无法将图像源更改为其他相册图像。
如何使用抽屉项目选择或其他方式更改resouorcess列表?
这是我的MainActivty.java。我尝试将resourceID更改为r1,r2,r3,r4,r5 ...
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private BitmapFactory.Options options;
private ViewPager viewPager;
private FragmentStatePagerAdapter adapter;
private ArrayList<Integer> images;
public static int[] resourceIDs = new int[] {
R.mipmap.p19,
R.mipmap.p18,
R.mipmap.p17,
R.mipmap.p16,
R.mipmap.p15,
R.mipmap.p14,
R.mipmap.p13,
R.mipmap.p12,
R.mipmap.p11,
R.mipmap.p10,
R.mipmap.p9,
R.mipmap.p8,
R.mipmap.p7,
R.mipmap.p6,
R.mipmap.p5,
R.mipmap.p4,
R.mipmap.p3,
R.mipmap.p2,
R.mipmap.p1,
R.mipmap.p0
} ;
@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);
//right to left sliding
viewPager.setCurrentItem(adapter.getCount() - 1);
}
private void setImagesData() {
for (int i = 0; i < resourceIDs.length; i++) {
images.add(resourceIDs[i]);
}
}
这是抽屉代码:
private void displaySelectedScreen(int itemId) {
//creating fragment object
Fragment fragment = null;
//initializing the fragment object which is selected
switch (itemId) {
case nav_album1:
fragment = new Album1();
images = new ArrayList<>();
resourceIDs = new int[] {
R.mipmap.p5,
R.mipmap.p4,
R.mipmap.p3,
R.mipmap.p2,
R.mipmap.p1};
adapter.notifyDataSetChanged();
adapter = new ViewPagerAdapter(getSupportFragmentManager(), images);
viewPager.setAdapter(adapter);
//setContentView(R.layout.kdaria);
break;
case R.id.nav_album2:
fragment = new Album2();
images = new ArrayList<>();
resourceIDs = new int[] {
R.mipmap.r5,
R.mipmap.r4,
R.mipmap.r3,
R.mipmap.r2,
R.mipmap.r1};
adapter.notifyDataSetChanged();
adapter = new ViewPagerAdapter(getSupportFragmentManager(), images);
viewPager.setAdapter(adapter);
break;
case R.id.nav_album3:
fragment = new Album3();
images = new ArrayList<>();
resourceIDs = new int[] {
R.mipmap.s5,
R.mipmap.s4,
R.mipmap.s3,
R.mipmap.s2,
R.mipmap.s1};
adapter.notifyDataSetChanged();
adapter = new ViewPagerAdapter(getSupportFragmentManager(), images);
viewPager.setAdapter(adapter);
break;
}
答案 0 :(得分:0)
所以这是你的代码。
private void displaySelectedScreen(int itemId) { Fragment fragment = null; switch (itemId) { case R.id.nav_album2: fragment = new Album2(); images = new ArrayList<>(); resourceIDs = new int[] { R.mipmap.r5, R.mipmap.r4, R.mipmap.r3, R.mipmap.r2, R.mipmap.r1}; adapter.notifyDataSetChanged(); break;
你在通知什么?您对adapter
数据一无所知。
如果您只想在ViewPager中显示不同的数据,则需要实际更新images
列表。然后你可以通知。
private void displaySelectedScreen(int itemId) {
images.clear(); // Always clear
List<Integer> newImages=new ArrayList<>();
switch (itemId) {
case R.id.nav_album2:
newImages = Arrays.asList(
R.mipmap.r5, R.mipmap.r4, R.mipmap.r3, R.mipmap.r2, R.mipmap.r1);
break;
case R.id_nav_album3:
newImages = Arrays.asList(...);
break;
}
images.addAll(newImages);
adapter.notifyDataSetChanged(); // always notify
}
外卖:
请勿images = new ArrayList<>()
,因为您的适配器不再“看到”images
。
您只需要一个适配器。您将一个引用更新为images
,然后您可以正确调用notifyDataSetChanged()
。
您无需重复设置和创建适配器的代码。