Edittext Setposition at the end

Asked

Viewed 88 times

0

I am trying to get when I click my Edit the cursor position go to the end of the text, my code is as follows:

Script

public class DetalhesCompraActivity extends Activity {

EditText tb_acrescimo;
EditText tb_desconto;
EditText tb_tot_pago;
EditText tb_obs;
EditText lb_total_mercadoria;
EditText lb_total_geral;
final int cont = MySingleton.getInstance().fornecedorNome.indexOf(MySingleton.getInstance().fornecedor_atual_edit);

// Name Bank
private static final String NOME_BANCO = "sisce_mob";

// Name Table
public static final String TABELA_NOME_OPE = "opeger";
public static final String TABELA_NOME_MER = "opeite";

protected SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_detalhes_compra);

    TextView lb_fornecedor_nome  = (TextView) findViewById(R.id.lb_fornecedor_nome);
    lb_total_mercadoria          = (EditText) findViewById(R.id.lb_total_mercadorias);
    lb_total_geral               = (EditText) findViewById(R.id.lb_total_geral);

    Button bt_nova_mercadoria  = (Button)   findViewById(R.id.bt_nova_mercadoria);
    Button bt_voltar           = (Button) findViewById(R.id.bt_log_voltar);
    Button bt_confirmar        = (Button) findViewById(R.id.bt_log_continuar);
    Button bt_excluir          = (Button) findViewById(R.id.bt_excluir);

    tb_obs       = (EditText)findViewById(R.id.tb_obs_compra);

    tb_acrescimo = (EditText)findViewById(R.id.tb_acrescimos);
    tb_desconto  = (EditText)findViewById(R.id.tb_descontos);
    tb_tot_pago  = (EditText)findViewById(R.id.tb_total_pago);

    tb_acrescimo.addTextChangedListener(tw_acrescimo);
    tb_desconto.addTextChangedListener(tw_desconto);
    tb_tot_pago.addTextChangedListener(tw_total_pago);

    db = DetalhesCompraActivity.this.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);

    String data = MySingleton.getInstance().data_selecionada;

    String[] datSepareted = data.split("/");

    data = datSepareted[2] + datSepareted[1] + datSepareted[0];

    String tipo = MySingleton.getInstance().tipoAtual;;
    String cod  = MySingleton.getInstance().fornecedor_atual_edit_cod;

    Cursor c = db.query(TABELA_NOME_OPE, null, "caddat=? and cadtip=? and caddes=?", new String[]{data, tipo, cod}, null, null, null);

    c.moveToFirst();

    int codI = c.getColumnIndex("cadcod");
    int datI = c.getColumnIndex("caddat");
    int vacI = c.getColumnIndex("cadvac");
    int vdeI = c.getColumnIndex("cadvde");
    int valI = c.getColumnIndex("cadval");
    int obsI = c.getColumnIndex("cadobs");

    lb_fornecedor_nome.setText(MySingleton.getInstance().fornecedor_atual_edit);

    String codM   = "";
    String totalP = "";
    String acres  = "";
    String desc   = "";
    String obs    = "";
    String totalM = ""; 
    String totalG = "";

    if(!MySingleton.getInstance().alterando){
        if(c.getCount() > 0){
            codM   = c.getString(codI);
            totalP = c.getString(valI);//MySingleton.getInstance().fornecedorTotalP.get(cont);
            acres  = c.getString(vacI);
            desc   = c.getString(vdeI);
            obs    = c.getString(obsI);
        }


        c = db.query(TABELA_NOME_MER, null, "cadcod=?", new String[]{codM}, null, null, null);

        c.moveToFirst();

        Float totalMI   = 0.00f;
        int valP      = c.getColumnIndex("cadvto");

        for(int i = 0; i<c.getCount(); i++){
            Float tempI = Float.parseFloat(c.getString(valP));

            totalMI = totalMI + tempI;
            c.moveToNext();
        }

        totalM = String.format(Locale.US,"%.2f", totalMI);  

        MySingleton.getInstance().alterando = true;
    }else{
        totalM = MySingleton.getInstance().fornecedorTotalM.get(cont);
        totalP = MySingleton.getInstance().fornecedorTotalP.get(cont);
        acres  = MySingleton.getInstance().fornecedorAcres.get(cont);
        desc   = MySingleton.getInstance().fornecedorDesc.get(cont);
        obs    = MySingleton.getInstance().fornecedorObs.get(cont);
    }

    if(totalM.equals(""))
        totalM = "0.00";
    if(totalP.equals(""))
        totalP = "0.00";
    if(acres.equals(""))
        acres = "0.00";
    if(desc.equals(""))
        desc = "0.00";
    if(obs.equals(""))
        obs = "";

    Float intTotalM = Float.parseFloat(totalM);
    Float intAcres  = Float.parseFloat(acres);
    Float intDesc   = Float.parseFloat(desc);

    Float intTotalG = intTotalM + intAcres + intDesc;

    totalG = String.format(Locale.US,"%.2f", intTotalG);
    acres  = String.format(Locale.US,"%.2f", intAcres);
    desc   = String.format(Locale.US,"%.2f", intDesc);

    Float totalPF = Float.parseFloat(totalP);
    totalP = String.format(Locale.US,"%.2f", totalPF);

    lb_total_geral.setText(totalG);
    lb_total_mercadoria.setText(totalM);
    tb_tot_pago.setText(totalP);
    tb_acrescimo.setText(acres);
    tb_desconto.setText(desc);
    tb_obs.setText(obs);

    tb_acrescimo.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            int position = tb_acrescimo.length();
            Editable etext = tb_acrescimo.getText();
            Selection.setSelection(etext, position);
        }
    });


    tb_desconto.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            int i = tb_desconto.getText().length();
            tb_desconto.setSelection(i);

        }
    });

    tb_tot_pago.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            int i = tb_tot_pago.getText().length();
            tb_tot_pago.setSelection(i);
        }
    });

    bt_confirmar.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            TextView lb_total_mercadoria = (TextView) findViewById(R.id.lb_total_mercadorias);
            TextView lb_total_geral      = (TextView) findViewById(R.id.lb_total_geral);
            tb_acrescimo                 = (EditText) findViewById(R.id.tb_acrescimos);
            tb_desconto                  = (EditText) findViewById(R.id.tb_descontos);
            tb_obs                       = (EditText) findViewById(R.id.tb_obs_compra);

            db = DetalhesCompraActivity.this.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);

            String tipo = "2";
            String cod  = MySingleton.getInstance().fornecedor_atual_edit_cod;
            String teste = "";

            Cursor c = db.query(TABELA_NOME_OPE, null, "cadtip=? and caddes=?", new String[]{tipo, cod}, null, null, null);
            c.moveToFirst();

            ContentValues valores = new ContentValues();

            String dat = MySingleton.getInstance().data_selecionada;

            String[] datSepareted = dat.split("/");

            dat = datSepareted[2] + datSepareted[1] + datSepareted[0];

            String totalP = tb_tot_pago.getText().toString();
            String acres  = tb_acrescimo.getText().toString();
            String desc   = tb_desconto.getText().toString();

            Float totalPF = Float.parseFloat(totalP);
            Float acresF  = Float.parseFloat(acres);
            Float descF   = Float.parseFloat(desc);

            String vac = String.format(Locale.US,"%.2f", acresF);
            String vde = String.format(Locale.US,"%.2f", descF);
            String val = String.format(Locale.US,"%.2f", totalPF);
            String obs = tb_obs.getText().toString();;

            valores.put("caddat", dat);
            valores.put("cadtip", tipo);
            valores.put("caddes", cod);
            valores.put("cadvac", vac);
            valores.put("cadvde", vde);
            valores.put("cadval", val);
            valores.put("cadobs", obs);

            if(c.getCount() > 0){
                db.update(TABELA_NOME_OPE, valores, "cadtip=? and caddes=?", new String[]{tipo, cod});
            }else{
                db.insert(TABELA_NOME_OPE, null, valores);
            }

            c = db.query(TABELA_NOME_OPE, null, "cadtip=? and caddes=?", new String[]{tipo, cod}, null, null, null);

            c.moveToFirst();

            String codOper = c.getString(c.getColumnIndex("cadcod"));

            if(!codOper.equals("")){
                db.delete(TABELA_NOME_MER, "cadcod=?", new String[]{codOper});
            }

            int contMercadorias = MySingleton.getInstance().cadMercadoriaFornecedorCod.size();

            for(int i = 0; i < contMercadorias; i++){
                valores.clear();

                if(MySingleton.getInstance().cadMercadoriaFornecedorCod.get(i).equals(cod)){
                    String cadcpr = MySingleton.getInstance().cadMercadoriaCod.get(i);
                    String cadqua = MySingleton.getInstance().cadMercadoriaQuant.get(i);
                    String cadvun = MySingleton.getInstance().cadMercadoriaValUnit.get(i);
                    String cadvto = MySingleton.getInstance().cadMercadoriaValTotal.get(i);

                    valores.put("cadcod", codOper);
                    valores.put("cadcpr", cadcpr);
                    valores.put("cadqua", cadqua);
                    valores.put("cadvun", cadvun);
                    valores.put("cadvto", cadvto);

                    db.insert(TABELA_NOME_MER, null, valores);
                }
            }

            DetalhesCompraActivity.this.finish();
            Intent it = new Intent(DetalhesCompraActivity.this, ListFornecedoresActivity.class);
            startActivity(it); 
        }
    });

    bt_nova_mercadoria.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            tb_acrescimo                 = (EditText)findViewById(R.id.tb_acrescimos);
            tb_desconto                  = (EditText)findViewById(R.id.tb_descontos);
            tb_tot_pago                  = (EditText)findViewById(R.id.tb_total_pago);
            tb_obs                       = (EditText)findViewById(R.id.tb_obs_compra);


            String totalp = tb_tot_pago.getText().toString();
            String obs    = tb_obs.getText().toString();
            String acres  = tb_acrescimo.getText().toString();
            String desc   = tb_desconto.getText().toString();

            MySingleton.getInstance().fornecedorTotalP.set(cont, totalp);
            MySingleton.getInstance().fornecedorObs.set(cont, obs);
            MySingleton.getInstance().fornecedorAcres.set(cont, acres);
            MySingleton.getInstance().fornecedorDesc.set(cont, desc);

            DetalhesCompraActivity.this.finish();
            Intent it = new Intent(DetalhesCompraActivity.this, ListMercadoriasActivity.class);
            startActivity(it); 
        }
    });

    bt_voltar.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            DetalhesCompraActivity.this.finish();
            Intent it = new Intent(DetalhesCompraActivity.this, ListFornecedoresActivity.class);
            startActivity(it); 
        }
    });

    bt_excluir.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String fAtual = MySingleton.getInstance().fornecedor_atual_edit;
            int cadI  = MySingleton.getInstance().fornecedorNome.indexOf(fAtual);
            int prodL = MySingleton.getInstance().cadMercadoriaFornecedorNome.size();

            MySingleton.getInstance().fornecedorTotalM.set(cadI, "");
            MySingleton.getInstance().fornecedorTotalG.set(cadI, "");
            MySingleton.getInstance().fornecedorTotalP.set(cadI, "");
            MySingleton.getInstance().fornecedorAcres.set(cadI, "");
            MySingleton.getInstance().fornecedorDesc.set(cadI, "");
            MySingleton.getInstance().fornecedorObs.set(cadI, "");

            for(int i = 0; i < MySingleton.getInstance().cadMercadoriaFornecedorNome.size();){
                String teste = MySingleton.getInstance().cadMercadoriaFornecedorNome.get(i);
                if(MySingleton.getInstance().cadMercadoriaFornecedorNome.get(i).equals(fAtual)){
                    MySingleton.getInstance().cadMercadoriaFornecedorCod.remove(i);
                    MySingleton.getInstance().cadMercadoriaFornecedorNome.remove(i);
                    MySingleton.getInstance().cadMercadoriaNome.remove(i);
                    MySingleton.getInstance().cadMercadoriaQuant.remove(i);
                    MySingleton.getInstance().cadMercadoriaUnid.remove(i);
                    MySingleton.getInstance().cadMercadoriaValTotal.remove(i);
                    MySingleton.getInstance().cadMercadoriaValUnit.remove(i);
                }else{
                    i = i +1;
                }
            }

            if(MySingleton.getInstance().fornecedorAlterado.get(cadI).equals("1")){
                MySingleton.getInstance().fornecedorAlterado.set(cadI, "0");
            }

            DetalhesCompraActivity.this.finish();
            Intent it = new Intent(DetalhesCompraActivity.this, ListFornecedoresActivity.class);
            startActivity(it); 
        }
    });
}

TextWatcher tw_acrescimo = new TextWatcher() {

      @Override
      public void onTextChanged(CharSequence s, int start, int before, int count) {
      }

      @Override
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
      }

      @Override
      public void afterTextChanged(Editable s) {



        if (!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$")) {
          String userInput = "" + s.toString().replaceAll("[^\\d]", "");
          StringBuilder cashAmountBuilder = new StringBuilder(userInput);

          tb_desconto                  = (EditText) findViewById(R.id.tb_descontos);
          lb_total_geral               = (EditText) findViewById(R.id.lb_total_geral);

          while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
            cashAmountBuilder.deleteCharAt(0);
          }
          while (cashAmountBuilder.length() < 3) {
            cashAmountBuilder.insert(0, '0');
          }
          cashAmountBuilder.insert(cashAmountBuilder.length() - 2, '.');

          tb_acrescimo.removeTextChangedListener(this);
          tb_acrescimo.setText(cashAmountBuilder.toString());

          tb_acrescimo.setTextKeepState(cashAmountBuilder.toString());
          Selection.setSelection(tb_acrescimo.getText(), cashAmountBuilder.toString().length());

          String strD  = tb_desconto.getText().toString();
          String strTM = tb_acrescimo.getText().toString();

          if(!strD.equals("") & !strTM.equals("")){
              Float d  = Float.parseFloat(tb_desconto.getText().toString());
              Float tm = Float.parseFloat(tb_acrescimo.getText().toString());
              Float a  = Float.parseFloat(lb_total_mercadoria.getText().toString());

              Float totalGeral = a + tm - d;

              String totalStr = String.format(Locale.US,"%.2f", totalGeral);

              lb_total_geral.setText(totalStr);
          }

          tb_acrescimo.addTextChangedListener(this);
        }
      }
};

TextWatcher tw_desconto = new TextWatcher() {

      @Override
      public void onTextChanged(CharSequence s, int start, int before, int count) {
      }

      @Override
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
      }

      @Override
      public void afterTextChanged(Editable s) {

        if (!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$")) {
            tb_desconto                  = (EditText) findViewById(R.id.tb_descontos);
            lb_total_geral               = (EditText) findViewById(R.id.lb_total_geral);

          String userInput = "" + s.toString().replaceAll("[^\\d]", "");
          StringBuilder cashAmountBuilder = new StringBuilder(userInput);

          while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
            cashAmountBuilder.deleteCharAt(0);
          }
          while (cashAmountBuilder.length() < 3) {
            cashAmountBuilder.insert(0, '0');
          }
          cashAmountBuilder.insert(cashAmountBuilder.length() - 2, '.');

          tb_desconto.removeTextChangedListener(this);
          tb_desconto.setText(cashAmountBuilder.toString());

          tb_desconto.setTextKeepState(cashAmountBuilder.toString());
          Selection.setSelection(tb_desconto.getText(), cashAmountBuilder.toString().length());

          String strD  = tb_desconto.getText().toString();
          String strTM = tb_acrescimo.getText().toString();

          if(!strD.equals("") & !strTM.equals("")){
              Float d  = Float.parseFloat(tb_desconto.getText().toString());
              Float tm = Float.parseFloat(tb_acrescimo.getText().toString());
              Float a  = Float.parseFloat(lb_total_mercadoria.getText().toString());

              Float totalGeral = a + tm - d;

              String totalStr = String.format(Locale.US,"%.2f", totalGeral);

              lb_total_geral.setText(totalStr);
          }
          tb_desconto.addTextChangedListener(this);

        }
      }
};

TextWatcher tw_total_pago = new TextWatcher() {

      @Override
      public void onTextChanged(CharSequence s, int start, int before, int count) {
      }

      @Override
      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
      }

      @Override
      public void afterTextChanged(Editable s) {

        if (!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$")) {
          String userInput = "" + s.toString().replaceAll("[^\\d]", "");
          StringBuilder cashAmountBuilder = new StringBuilder(userInput);

          while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
            cashAmountBuilder.deleteCharAt(0);
          }
          while (cashAmountBuilder.length() < 3) {
            cashAmountBuilder.insert(0, '0');
          }
          cashAmountBuilder.insert(cashAmountBuilder.length() - 2, '.');

          tb_tot_pago.removeTextChangedListener(this);
          tb_tot_pago.setText(cashAmountBuilder.toString());

          tb_tot_pago.setTextKeepState(cashAmountBuilder.toString());
          Selection.setSelection(tb_tot_pago.getText(), cashAmountBuilder.toString().length());

          tb_tot_pago.addTextChangedListener(this);
        }
      }
};

}

But it works in the Android API 2.3 but does not work in 4.1, someone knows what I should do?

  • Dude, try to deactivate this Action of yours, because there are moments that are repeating unnecessary code that may be interfering with the final result

1 answer

1

Try this

tb_acrescimo.setSelection(tb_acrescimo.getText().length()); 

or

tb_acrescimo.setText("Updated Text From another Activity");
int position = tb_acrescimo.length();
Editable etext = tb_acrescimo.getText();
Selection.setSelection(etext, position);

or put this in xml

android:ellipsize="end"
  • This was really an error, but it still doesn’t work, what seems to me is that there is another function that is called after the Onfocuschanged that changes the cursor again to the start.

  • you used gettext() to get the length() and it still didn’t work?

  • I’ll edit it for you to see how it looked, continues as before, the weirdest thing is to work in the emulator with Android 2.3 and on mobile with this same Android, but not to work in 4.1 on my mobile phone.

  • I edited the answer try that

  • Still the same thing, friend, am I subscribing to the correct event? In my tests this really seems the problem

  • post your xml and the whole class

  • All right, just a minute

  • It did not fit all, so I put only the script, if necessary replace the script with XML

Show 3 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.