Skip to content

Instantly share code, notes, and snippets.

@MartinBergerDX
Last active December 4, 2019 17:20
Show Gist options
  • Save MartinBergerDX/473c47b008b6b0570466794f221eca31 to your computer and use it in GitHub Desktop.
Save MartinBergerDX/473c47b008b6b0570466794f221eca31 to your computer and use it in GitHub Desktop.
Android EditText
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import android.widget.Toast;
import com.tiacgroup.sfa.R;
import com.tiacgroup.sfa.model.Roba;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class TipskoTrebovanjeAdapter extends ArrayAdapter<TipskoTrebovanjeFragment.StavkeHelper> implements Filterable {
private List<TipskoTrebovanjeFragment.StavkeHelper> listaStavki;
private List<TipskoTrebovanjeFragment.StavkeHelper> filteredListaStavki;
private Filter listFilter;
private Context mContext;
private TipskoTrebovanjeFragment fragment;
public TipskoTrebovanjeAdapter(Context context, List<TipskoTrebovanjeFragment.StavkeHelper> values, TipskoTrebovanjeFragment fragment) {
super(context, R.layout.tipsko_trebovanje_item, values);
this.mContext = context;
this.listaStavki = values;
this.filteredListaStavki = values;
this.fragment = fragment;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder vh;
TipskoTrebovanjeFragment.StavkeHelper stavkaHelper = listaStavki.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.tipsko_trebovanje_item, parent, false);
vh = new ViewHolder();
vh.tvNazivRobe = (TextView) convertView.findViewById(R.id.tv_tipsko_trebovanje_proizvod);
//setup edittext views
vh.etPonedeljaKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_ponedeljak);
// vh.etPonedeljaKolicina.setSelectAllOnFocus(true);
vh.etUtoraKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_utorak);
// vh.etUtoraKolicina.setSelectAllOnFocus(true);
vh.etSredaKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_sreda);
// vh.etSredaKolicina.setSelectAllOnFocus(true);
vh.etCetvrtaKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_cetvrtak);
// vh.etCetvrtaKolicina.setSelectAllOnFocus(true);
vh.etPetaKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_petak);
// vh.etPetaKolicina.setSelectAllOnFocus(true);
vh.etSubotaKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_subota);
// vh.etSubotaKolicina.setSelectAllOnFocus(true);
vh.etNedeljaKolicina = (EditText) convertView.findViewById(R.id.et_tipsko_trebovanje_nedelja);
// vh.etNedeljaKolicina.setSelectAllOnFocus(true);
//set new listeners
setListeners(vh, stavkaHelper);
convertView.setTag(vh);
} else {
vh = (ViewHolder) convertView.getTag();
}
// Remove any existing TextWatcher that will be keyed to the wrong ListItem
if (vh.twPon != null) {
resetListeners(vh, stavkaHelper);
}
//set values
vh.tvNazivRobe.setText(stavkaHelper.getVarijantaRobe().getSifraRobe().getNazivRobe());
double[] kolicinePoDanima = stavkaHelper.getKolicinePoDanima();
vh.etPonedeljaKolicina.setText(Double.toString(kolicinePoDanima[0]));
vh.etUtoraKolicina.setText(Double.toString(kolicinePoDanima[1]));
vh.etSredaKolicina.setText(Double.toString(kolicinePoDanima[2]));
vh.etCetvrtaKolicina.setText(Double.toString(kolicinePoDanima[3]));
vh.etPetaKolicina.setText(Double.toString(kolicinePoDanima[4]));
vh.etSubotaKolicina.setText(Double.toString(kolicinePoDanima[5]));
vh.etNedeljaKolicina.setText(Double.toString(kolicinePoDanima[6]));
return convertView;
}
@Override
public Filter getFilter(){
if(listFilter == null){
listFilter = new StavkeFilter();
}
return listFilter;
}
private class StavkeFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults oReturn = new FilterResults();
ArrayList<TipskoTrebovanjeFragment.StavkeHelper> results = new ArrayList<>(filteredListaStavki);
// ArrayList<StavkeHelper> results = new ArrayList<>(listaStavki);
String input = constraint.toString().toLowerCase();
if (input == null || input.trim().length() == 0){
oReturn.values = results;
oReturn.count = results.size();
} else {
final ArrayList<TipskoTrebovanjeFragment.StavkeHelper> nlist = new ArrayList<>();
int count = results.size();
for (int i = 0; i < count; i++){
final TipskoTrebovanjeFragment.StavkeHelper stavkaHelper = results.get(i);
final String value = stavkaHelper.getVarijantaRobe().getSifraRobe().getNazivRobe().toLowerCase();
if (value.contains(input)){
nlist.add(stavkaHelper);
}
oReturn.values = nlist;
oReturn.count = nlist.size();
}
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
listaStavki = (ArrayList<TipskoTrebovanjeFragment.StavkeHelper>) results.values;
notifyDataSetChanged();
}
}
public void resetList(List<TipskoTrebovanjeFragment.StavkeHelper> resetList) {
clear();
this.listaStavki = resetList;
this.filteredListaStavki = resetList;
notifyDataSetChanged();
}
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public int getCount() {
return listaStavki.size();
}
@Override
public TipskoTrebovanjeFragment.StavkeHelper getItem(int position) {
return listaStavki.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private void setListeners(ViewHolder vh, TipskoTrebovanjeFragment.StavkeHelper stavkaNedeljniGroup){
TextWatcher tw;
tw = new GenericTextWatcher(vh.etPonedeljaKolicina, stavkaNedeljniGroup);
vh.etPonedeljaKolicina.addTextChangedListener(tw);
vh.twPon = tw;
setOtherListeners(vh.etPonedeljaKolicina);
tw = new GenericTextWatcher(vh.etUtoraKolicina, stavkaNedeljniGroup);
vh.etUtoraKolicina.addTextChangedListener(tw);
vh.twUto = tw;
setOtherListeners(vh.etUtoraKolicina);
tw = new GenericTextWatcher(vh.etSredaKolicina, stavkaNedeljniGroup);
vh.etSredaKolicina.addTextChangedListener(tw);
vh.twSre = tw;
setOtherListeners(vh.etSredaKolicina);
tw = new GenericTextWatcher(vh.etCetvrtaKolicina, stavkaNedeljniGroup);
vh.etCetvrtaKolicina.addTextChangedListener(tw);
vh.twCet = tw;
setOtherListeners(vh.etCetvrtaKolicina);
tw = new GenericTextWatcher(vh.etPetaKolicina, stavkaNedeljniGroup);
vh.etPetaKolicina.addTextChangedListener(tw);
vh.twPet = tw;
setOtherListeners(vh.etPetaKolicina);
tw = new GenericTextWatcher(vh.etSubotaKolicina, stavkaNedeljniGroup);
vh.etSubotaKolicina.addTextChangedListener(tw);
vh.twSub = tw;
setOtherListeners(vh.etSubotaKolicina);
tw = new GenericTextWatcher(vh.etNedeljaKolicina, stavkaNedeljniGroup);
vh.etNedeljaKolicina.addTextChangedListener(tw);
vh.twNed = tw;
setOtherListeners(vh.etNedeljaKolicina);
}
private void setOtherListeners(final EditText editText) {
editText.setSelectAllOnFocus(true);
editText.setCursorVisible(false);
editText.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
view.requestFocus();
break;
}
return false;
}
});
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((EditText) v).selectAll();
}
});
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_UP) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
return false;
}
});
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
double amount = Double.parseDouble(((EditText)v).getText().toString());
DecimalFormat df = new DecimalFormat("0.0");
String result = df.format(amount);
((EditText)v).setText(result);
}
}
});
}
private void resetListeners(ViewHolder vh, TipskoTrebovanjeFragment.StavkeHelper stavkaNedeljniGroup) {
vh.etPonedeljaKolicina.removeTextChangedListener(vh.twPon);
vh.etUtoraKolicina.removeTextChangedListener(vh.twUto);
vh.etSredaKolicina.removeTextChangedListener(vh.twSre);
vh.etCetvrtaKolicina.removeTextChangedListener(vh.twCet);
vh.etPetaKolicina.removeTextChangedListener(vh.twPet);
vh.etSubotaKolicina.removeTextChangedListener(vh.twSub);
vh.etNedeljaKolicina.removeTextChangedListener(vh.twNed);
setListeners(vh, stavkaNedeljniGroup);
}
private class GenericTextWatcher implements TextWatcher {
private View view;
private TipskoTrebovanjeFragment.StavkeHelper stavkaGroup;
private double prethodnaKolicina;
private GenericTextWatcher(View view, TipskoTrebovanjeFragment.StavkeHelper stavkaGroup) {
this.view = view;
this.stavkaGroup = stavkaGroup;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
try {
// if (charSequence.equals("")) {
// charSequence = "0.00";
// }
prethodnaKolicina = Double.parseDouble(charSequence.toString());
} catch (NumberFormatException e) {
// fileLogger.error(Sinhronizacija.logHeader + e.getMessage(), e);
return;
}
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void afterTextChanged(Editable editable) {
String text = editable.toString();
double unetaKolicina;
if ("".equals(text.trim())) {
unetaKolicina = 0;
} else {
try {
unetaKolicina = Double.parseDouble(text.trim());
Roba roba = stavkaGroup.getVarijantaRobe().getSifraRobe();
if (roba != null && roba.getJedinicaMere().getSifraJediniceMere().toLowerCase().contains("kom") && (unetaKolicina - (int)unetaKolicina) > 0) {
unetaKolicina = Math.floor(unetaKolicina);
((EditText)view).removeTextChangedListener(this);
DecimalFormat df = new DecimalFormat("0.0");
String result = df.format(unetaKolicina);
((EditText)view).setText(result);
((EditText)view).addTextChangedListener(this);
}
} catch (NumberFormatException e) {
// fileLogger.error(Sinhronizacija.logHeader + e.getMessage(), e);
Toast.makeText(mContext, R.string.pogresan_format_kolicine, Toast.LENGTH_SHORT).show();
return;
}
}
// view.setBackgroundColor(mContext.getResources().getColor(R.color.status_partnera_zuta));
int i = getViewPostition(view);
if (unetaKolicina != prethodnaKolicina) {
stavkaGroup.getKolicinePoDanima()[i-1] = unetaKolicina;
//azuriraj porudzbenicu za taj dan
fragment.azurirajPorudzbenicu(i, stavkaGroup);
}
}
}
private int getViewPostition(View view) {
int i = 0;
switch(view.getId()){
case R.id.et_tipsko_trebovanje_ponedeljak:
i = 1;
break;
case R.id.et_tipsko_trebovanje_utorak:
i = 2;
break;
case R.id.et_tipsko_trebovanje_sreda:
i = 3;
break;
case R.id.et_tipsko_trebovanje_cetvrtak:
i = 4;
break;
case R.id.et_tipsko_trebovanje_petak:
i = 5;
break;
case R.id.et_tipsko_trebovanje_subota:
i = 6;
break;
case R.id.et_tipsko_trebovanje_nedelja:
i = 7;
break;
}
return i;
}
private static class ViewHolder {
public TextView tvNazivRobe;
public EditText etPonedeljaKolicina;
public EditText etUtoraKolicina;
public EditText etSredaKolicina;
public EditText etCetvrtaKolicina;
public EditText etPetaKolicina;
public EditText etSubotaKolicina;
public EditText etNedeljaKolicina;
public TextWatcher twPon;
public TextWatcher twUto;
public TextWatcher twSre;
public TextWatcher twCet;
public TextWatcher twPet;
public TextWatcher twSub;
public TextWatcher twNed;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment