[英]Viewpager fragment selector state
我正在尝试创建一个viewpager,用户可以在其中点击照片,并且照片将处于“突出显示”状态。
我通过在图像上方设置FrameLayout叠加层来达到“突出显示”状态。 问题是,当我在页面上滑动时,状态不仅丢失,而且还显示在未选择的图像上。
这是我的viewpager适配器:
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;
}
}
所以我的问题是,如何保持突出显示状态?
您可以更改highlight view
的visibility
,而不是selected state
。
默认情况下,将高亮视图的visibility
设置为“ GONE
,选择图像GONE
其更改为visible
。
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);
}
});
根据[FragmentPagerAdapter文档](视图层次结构在不可见时可能会被破坏),
用户访问的每个页面的片段都将保留在内存中,尽管其视图层次结构可能在不可见时被破坏
离开view
可能会从默认布局中重新加载该视图,这就是为什么突出显示状态丢失的原因。
您应该在Fragment
保持突出显示状态:
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.