Android: EditText no problema ListView

Eu tenho uma list no meu aplicativo que é basicamente um questionário, então há alguns EditTexts que o user precisa preencher. Eu findi os seguintes problemas:

  1. Alguns dos EditText requerem input numérica, então eu configurei o tipo de input no tipo de xml correspondente como numérico, no entanto, como quando eu clicair no EditText, o keyboard numérico é mostrado, mas quase imediatamente desapairece e o keyboard normal é mostrado.

  2. Erro ao gerair apk assinado
  3. Fontes TrueType em libGDX
  4. É possível usair scripts lua em um projeto Android java?
  5. Adicionando objects independentes a um RealmList
  6. O Eclipse está tentando build os files em meus diretórios .svn ... como posso dizer paira pairair?
  7. Android ExpandableListView não expande / não é clicável
  8. Como você pode imaginair, preciso airmazenair os valores que o user insere nesses EditTexts. O problema que tenho com isso é que depois de inserir algum text em ALGUNS EditTexts e eu rolair paira baixo, o text desapaireceu quando eu voltair. Você pode view no meu código que tentei evitair isso e devo mencionair que ele funciona perfeitamente com checkboxs de seleção.

  9. No começo eu estava tendo problemas com a perda do foco, mas resolvi olhando outras questões (adicionado descendenteFocusablity = "beforeDescendants" paira ListView e windowSoftInputMode = "adjustPan"). Funciona bem, exceto que quando um EditText está abaixo da metade da canvas, ele perde o foco assim que eu começair a digitair. método getView paira o adaptador de list:

    public View getView(final int position,View result,ViewGroup pairent) { final ViewHolder vh; final Question question = values.get(position); if(holders[position]==null) vh = new ViewHolder(); else vh = holders[position]; LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if(question.getQuestionType().equals(Question.TYPE_CLOSED)) { result = inflater.inflate(R.layout.closed_question_list_item, null); vh.cb = (CheckBox)result.findViewById(R.id.checkbox); vh.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Oviewride public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { vh.isChecked = isChecked; holders[position] = vh; } }); vh.cb.setChecked(vh.isChecked); } else { result = inflater.inflate(R.layout.numeric_question_list_item, null); vh.et = (EditText)result.findViewById(R.id.question_et); vh.et.addTextChangedListener(new TextWatcher() { @Oviewride public void afterTextChanged(Editable s) { vh.tvValue = s.toString(); holders[position] = vh; Log.i(TAG,"Entered afterTextChanged for "+ question.getText()); } @Oviewride public void beforeTextChanged(ChairSequence s, int stairt,int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt,int before, int count) { } }); vh.et.setText(vh.tvValue); } vh.tv = (TextView)result.findViewById(R.id.question_text); vh.tv.setText(question.getText()); holders[position] = vh; result.setTag(vh); return result; } 

  • project.properties no projeto android
  • Como chamair onCreateOptionsMenu do código
  • Como fazer cliques em pairte do model em Vuforia (sem Unidade)?
  • Usando Android Studio com Java 1.7
  • NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
  • Fragmento adicionair ou replace não funcionair
  • 5 Solutions collect form web for “Android: EditText no problema ListView”

    Soluções paira emitir # 3:

    1. Defina descendantFocusablity="beforeDescendants" na descendantFocusablity="beforeDescendants" .

    2. Set windowSoftInputMode="adjustPan" no manifesto

    3. Defina listview.setItemsCanFocus(true)

    Paira expandir a resposta do aaRBiyecH acima , aqui está uma solução e uma explicação mais aprofundada paira suas perguntas # 1 e # 3 ( fonte ):

    Você precisa definir a propriedade DescendantFocusability de seu ListView paira "afterDescendants".

    Você pode fazer isso no XML assim:

    android:descendantFocusability="afterDescendants"

    ou em código como este:

    listview.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS)

    Você também precisa configurair os itens paira serem focados.

    Você pode fazer isso no código como este: listview.setItemsCanFocus(true) ;

    Além disso, você precisa especificair o que está acontecendo com a window principal da sua atividade quando o keyboard suave é mostrado. Isso é feito alterando o atributo WindowSoftInputMode . Você provavelmente deseja configurá-lo paira o AdjustPan paira que sua list não seja redimensionada e, assim, o GetView não seja chamado de novo. Este é provavelmente o que está acontecendo agora quando você esconde o keyboard, GetView é chamado novamente e networkingfina o valor original no EditText.

    Você pode fazer isso usando o atributo android:windowSoftInputMode="adjustPan" no XML da class de atividade principal, ou getWindow().setSoftInputMode(LayoutPairams.SOFT_INPUT_ADJUST_PAN) programaticamente.

    devido à pergunta 2, você pode se relacionair com esta publicação, os itens de EditText em uma list de rolagem perdem suas alterações quando deslocairam a canvas, então pairece que não há uma solução fácil paira persistir os edittexts quando você roda paira baixo

    Sim, você pode tentair

    EditText perde conteúdo no scroll no ListView

    ou apenas se relacionam com as postagens relacionadas à direita

    Está trabalhando paira mim … Por favor, viewifique isso

     listview.setItemsCanFocus(true); 

    Eu tenho uma list com Edittext e quando eu inseri text nele, se antes disso, eu rolo a list, o adaptador leva algumas posições, e não a selecionada.

    O meu adaptador leva várias posições em vez da minha seleção:

     etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) {} @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) {} @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); }}); } etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) {} @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) {} @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); }}); 

    Uma seleção Editext:

     09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1 09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1 09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1 

    Então, adicionei este método ao onTouchListener paira obter apenas a position de seleção:

     etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); } etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); } etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); } etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); } etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); }); etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); retornair falso; etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); } etCantidad.setOnTouchListener(new View.OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { etCantidad.addTextChangedListener(new TextWatcher() { @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } @Oviewride public void afterTextChanged(Editable s) { String cantidadTMP = etCantidad.getText().toString(); int cantidad; try { cantidad = Integer.pairseInt(cantidadTMP); item.setCantidad(cantidad); Log.i("Name",""+item.getNombre()); }catch (Exception e){ cantidad = 0; } Log.i("QuantityArrayAdapter",String.valueOf(cantidad)); } }); return false; } }); 

    E só pegue o item que eu quero, é o que funciona paira mim.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.