Skip to content

Instantly share code, notes, and snippets.

@ozgurg
Last active February 9, 2022 08:05
Show Gist options
  • Save ozgurg/16119484d13dabd25de60296cb8365f1 to your computer and use it in GitHub Desktop.
Save ozgurg/16119484d13dabd25de60296cb8365f1 to your computer and use it in GitHub Desktop.
Android ViewFlipper with listener

Usage (Java)

mViewFlipper.setOnChildChangeListener(new ViewFlipper.OnChildChangeListener() {  
  @Override  
  public void onChange(int whichChild) {  
      Toast.makeText(mActivity, String.valueOf(whichChild), Toast.LENGTH_SHORT).show();  
  }  
});

Cheatsheet

Old New
setDisplayedChild(args) setActiveChild(args)
showPrevious() previous()
showNext() next()
import android.content.Context;
import android.util.AttributeSet;
public class ViewFlipper extends android.widget.ViewFlipper {
private OnChildChangeListener mListener;
public ViewFlipper(Context context) {
super(context);
}
public ViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setOnChildChangeListener(OnChildChangeListener listener) {
this.mListener = listener;
}
public void setActiveChild(int whichChild) {
this.setDisplayedChild(whichChild);
if (this.mListener != null) {
this.mListener.onChange(whichChild);
}
}
public void previous() {
this.showPrevious();
if (this.mListener != null) {
this.mListener.onChange(this.getDisplayedChild());
}
}
public void next() {
this.showNext();
if (this.mListener != null) {
this.mListener.onChange(this.getDisplayedChild());
}
}
public interface OnChildChangeListener {
void onChange(int whichChild);
}
}
class ViewFlipper(context: Context, attrs: AttributeSet? = null) : ViewFlipper(context, attrs) {
var listener: OnChildChangeListener? = null
private fun currentView(): View = getChildAt(displayedChild)
private fun previousView(): View {
if (displayedChild - 1 > 0) {
return getChildAt(displayedChild - 1)
}
return getChildAt(0)
}
private fun nextView(): View {
if (displayedChild + 1 < childCount) {
return getChildAt(displayedChild + 1)
}
return getChildAt(0)
}
override fun showPrevious() {
super.showPrevious()
listener?.onChildChanged(displayedChild, currentView(), previousView(), nextView())
}
override fun showNext() {
super.showNext()
listener?.onChildChanged(displayedChild, currentView(), previousView(), nextView())
}
interface OnChildChangeListener {
fun onChildChanged(index: Int, currentView: View, previousView: View, nextView: View)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment