Last active
December 4, 2019 17:20
-
-
Save MartinBergerDX/473c47b008b6b0570466794f221eca31 to your computer and use it in GitHub Desktop.
Android EditText
This file contains 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.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