Android Viewpager片段选择器状态
我正在尝试创建一个viewpager,用户可以点击一张照片,照片将处于“突出显示”状态 我通过在图像上方设置FrameLayout覆盖来实现“突出显示”状态。问题是,当我在页面中滑动时,状态不仅会丢失,而且会出现在未选择的图像上 这是我的viewpager适配器:Android Viewpager片段选择器状态,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我正在尝试创建一个viewpager,用户可以点击一张照片,照片将处于“突出显示”状态 我通过在图像上方设置FrameLayout覆盖来实现“突出显示”状态。问题是,当我在页面中滑动时,状态不仅会丢失,而且会出现在未选择的图像上 这是我的viewpager适配器: public class ImageSliderAdapter extends FragmentPagerAdapter { //Image ids from constants private int[] Images = Con
public class ImageSliderAdapter extends FragmentPagerAdapter {
//Image ids from constants
private int[] Images = Constants.Images;
private int mCount = Images.length;
public ImageSliderAdapter$Adapter(FragmentManager fm) {
super(fm);
}
// The displayed fragment for each position
@Override
public FragmentImageSlider getItem(int position) {
return FragmentImageSlider.newInstance(Images[position];
}
@Override
public int getCount() {
return mCount;
}
}
这是viewpager返回的片段:
public class FragmentImageSlider extends Fragment {
//Image resource id to show
int imageResourceId;
//Image view of the pic displayed
ImageView image;
// View to indicate highlighted images
View highliteView;
public static FragmentImageSlider newInstance(int imageResourceId){
FragmentImageSlider f = new FragmentImageSlider();
Bundle b = new Bundle();
b.putInt("image", imageResourceId);
f.setArguments(b);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (getArguments() !=null) {
//get image resource id from extras
imageResourceId = getArguments().getInt("image");
}
View root = inflater.inflate(R.layout.displayLayout, null);
image = (ImageView) root.findViewById(R.id.imageView);
highliteView = root.findViewById(R.id.highliteView);
image.setImageResource(imageResourceId);
//When the image is clicked, toggle the highlighted state
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//toggle state
//this view has a selector and changes when selected
highliteView.setSelected(!highliteView.isSelected());
}
});
return root;
}
}
因此,我的问题是,如何保持高亮显示状态?您可以更改高亮显示视图的可见性,而不是选定状态
默认情况下,将“高光视图”的可见性设置为“消失”,并在选择图像时将其更改为“可见”
根据[FragmentPagerAdapter document],视图层次结构在不可见时可能会被破坏 用户访问的每个页面的片段都将保存在内存中,尽管其视图层次结构在不可见时可能会被破坏 当视图离开视图时,可能会从默认布局重新加载视图,这就是高光状态丢失的原因 您应该在片段中保持突出显示状态:
highliteView.setVisibility(View.GONE);
// when the image is clicked show the highlighted view
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
highliteView.setVisibility(View.VISIBLE);
}
});
public MyFragment extends Fragment{
//variable to keep the state
private boolean highlight;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//rest of your other code
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
highliteView.setSelected(!highliteView.isSelected());
//set the highlight state when clicked
highlight = !highliteView.isSelected();
}
});
return root;
}
//set the view state to the image view
public void onViewCreated(View view, Bundle savedInstanceState){
highliteView.setSelected(highlight);
}
}