Last active
April 18, 2018 08:04
-
-
Save vudunguit/f1a42e45ff4f06a02db022e8640d8029 to your computer and use it in GitHub Desktop.
Class help views check change controller, same RadioGroup but more flexible
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.view.View | |
class TabControler : View.OnClickListener { | |
private var listener: OnCheckedChangeListener? = null | |
private val tabs = mutableListOf<View>() | |
private var lastSelected: Int = 0 | |
fun setTabs(firstSelected: Int, vararg views: View) { | |
tabs.clear() | |
for (i in views.indices) { | |
val v = views[i] | |
v.tag = i | |
v.setOnClickListener(this) | |
setCheck(v, i == firstSelected) | |
tabs.add(v) | |
} | |
lastSelected = firstSelected | |
} | |
fun setListener( | |
listener: OnCheckedChangeListener) { | |
this.listener = listener | |
} | |
override fun onClick(v: View) { | |
val position = v.tag as Int | |
setSelection(position) | |
} | |
fun setSelection(position: Int) { | |
if (tabs.isEmpty() | |
|| tabs.size <= position | |
|| position < 0) | |
return | |
if (position == lastSelected) return | |
//set checked current tab | |
setCheck(tabs[position], true) | |
if (lastSelected >= 0 && lastSelected < tabs.size) { | |
//set unchecked last tab | |
setCheck(tabs[lastSelected], false) | |
} | |
lastSelected = position | |
if (listener != null) { | |
listener!!.onChanged(tabs[position].id, position) | |
} | |
} | |
private fun setCheck(v: View, isChecked: Boolean) { | |
v.isSelected = isChecked | |
} | |
interface OnCheckedChangeListener { | |
fun onChanged(checkedId: Int, position: Int) | |
} | |
companion object { | |
private val NO_ID = -1 | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.view.View; | |
import android.widget.CheckBox; | |
import android.widget.RadioButton; | |
/** | |
* Created by TALE on 3/20/2014. | |
*/ | |
public class ViewGroupCheckController implements View.OnClickListener { | |
private View[] radioButtons; | |
private int mLastSelected = -1; | |
public final int NO_VIEW_ID = -1; | |
private OnCheckedChangeListener onCheckedChangeListener; | |
public void setViews(View... buttons) { | |
if (buttons == null || buttons.length == 0) { | |
return; | |
} | |
radioButtons = new View[buttons.length]; | |
for (int i = 0; i < buttons.length; i++) { | |
final View view = buttons[i]; | |
view.setTag(i); | |
view.setOnClickListener(this); | |
radioButtons[i] = view; | |
} | |
} | |
@Override | |
public void onClick(View v) { | |
setSelection((Integer) v.getTag()); | |
} | |
public int getCheckedRadioButtonId() { | |
if(mLastSelected < 0 || mLastSelected >= radioButtons.length){ | |
return NO_VIEW_ID; | |
} | |
return radioButtons[mLastSelected].getId(); | |
} | |
public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { | |
this.onCheckedChangeListener = onCheckedChangeListener; | |
} | |
public interface OnCheckedChangeListener { | |
void onCheckedChanged(int checkedId, int position); | |
} | |
public void setSelection(int position) { | |
if (radioButtons == null || radioButtons.length <= position || position < 0) { | |
return; | |
} | |
if(position == mLastSelected){ | |
return; | |
} | |
setCheck(radioButtons[position], true); | |
if(mLastSelected >= 0 && mLastSelected < radioButtons.length){ | |
//set last selected pos check state > false | |
setCheck(radioButtons[mLastSelected], false); | |
} | |
if(onCheckedChangeListener != null){ | |
onCheckedChangeListener.onCheckedChanged(radioButtons[position].getId(), position); | |
} | |
mLastSelected = position; | |
} | |
private void setCheck(View v, boolean checked){ | |
if(v instanceof RadioButton){ | |
((RadioButton) v).setChecked(checked); | |
}else if(v instanceof CheckBox){ | |
((CheckBox) v).setChecked(checked); | |
}else{ | |
v.setSelected(checked); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment