2014-04-26 33 views
0

我試圖創建一個viewpager,用戶可以點擊一張照片,照片將採取「突出顯示」狀態。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; 
} 
} 

所以我的問題是,我怎麼能保持聚焦狀態?

回答

0

您可以更改您的highlight viewvisibility而不是selected state

默認情況下,將高亮顯示的visibility設置爲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); 
    } 
}); 
0

按照[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); 
    } 
}