Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Viewpager片段选择器状态_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android 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

我正在尝试创建一个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;
 }
}
因此,我的问题是,如何保持高亮显示状态?

您可以更改高亮显示视图的可见性,而不是选定状态

默认情况下,将“高光视图”的可见性设置为“消失”,并在选择图像时将其更改为“可见”


根据[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);
    }
}