Skip to content

Instantly share code, notes, and snippets.

@vudunguit
Last active April 18, 2018 08:04
Show Gist options
  • Save vudunguit/f1a42e45ff4f06a02db022e8640d8029 to your computer and use it in GitHub Desktop.
Save vudunguit/f1a42e45ff4f06a02db022e8640d8029 to your computer and use it in GitHub Desktop.
Class help views check change controller, same RadioGroup but more flexible
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
}
}
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