在ViewPager2的onPageSelected方法中更改视图的可见性不起作用的问题可能是因为在第一次调用时视图尚未被完全初始化。为了解决这个问题,可以在视图的初始化完成后再进行可见性的更改。
以下是一个示例代码,演示了如何在ViewPager2的onPageSelected方法中更改视图的可见性:
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private LinearLayout dotsLayout;
private List dots;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
dotsLayout = findViewById(R.id.dotsLayout);
// 初始化ViewPager2和点指示器
initViewPager();
initDots();
}
private void initViewPager() {
List images = new ArrayList<>();
images.add(R.drawable.image1);
images.add(R.drawable.image2);
images.add(R.drawable.image3);
viewPager.setAdapter(new ViewPagerAdapter(images));
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
// 在视图初始化完成后更改点指示器的可见性
dots.get(position).setVisibility(View.VISIBLE);
for (int i = 0; i < dots.size(); i++) {
if (i != position) {
dots.get(i).setVisibility(View.INVISIBLE);
}
}
}
});
}
private void initDots() {
dots = new ArrayList<>();
for (int i = 0; i < 3; i++) {
ImageView dot = new ImageView(this);
dot.setImageResource(R.drawable.dot);
dot.setVisibility(View.INVISIBLE);
dotsLayout.addView(dot);
dots.add(dot);
}
// 初始化第一个点为可见
dots.get(0).setVisibility(View.VISIBLE);
}
private class ViewPagerAdapter extends RecyclerView.Adapter {
private List images;
public ViewPagerAdapter(List images) {
this.images = images;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.imageView.setImageResource(images.get(position));
}
@Override
public int getItemCount() {
return images.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
}
}
}
}
在上述代码中,我们首先在onCreate方法中初始化ViewPager2和点指示器。然后,在onPageSelected方法中,我们通过获取当前选中的位置,再根据位置更改点指示器的可见性。注意,我们在初始化点指示器时,将第一个点设置为可见。
这样,当ViewPager2进行切换时,点指示器的可见性将正确地被更改。