2015-01-06 4 views
0

android에서 ListView의 각 행에 대한 edittext가 있습니다. 각 EditText에는 특정 시스템 요구 사항을 실행하기위한 이벤트 클릭이 있습니다. 문제는 첫 번째 행의 edittext에서 예를 클릭하고 여섯 번째 행도 포커스와 클릭 이벤트를받을 때입니다. ListView 행의 EditText에서 다중 포커스

개인 클래스 FocusHandler가 {

@Override 
    public void onFocusChange(View view, boolean hasFocus) { 

     Log.d("PRODUTO", "ON FOCUS "+hasFocus+" "+view); 
     if (!hasFocus) { 
      if (focusedEditText != null) { 
       focusedEditText.removeTextChangedListener(textWatcher); 
       if (focusedEditText.getText().toString().equals("")) { 
        focusedEditText.setText(temp); 
       }//end if 
      }//end if 
     } else { 
      EditText et = (EditText) view; 
      focusedEditText = et; 
      temp = focusedEditText.getText().toString(); 
      focusedEditText.setText(""); 
      focusedEditText.addTextChangedListener(textWatcher); 

     }// end else 

     //focusedEditText = null; 

    }// end method 

}// end class 
+0

getView 코드를 게시 할 수 있습니까? – Groco

+0

대답으로 게시 됨 –

답변

0

@Override 감사합니다 ... 물론, 예 공공 무효의 Bindview (OnFocusChangeListener를 구현 EDITTEXT를 클릭하는 이벤트를 설정하는 내 FocusHandler입니다 최종 뷰 뷰, 최종 컨텍스트 컨텍스트, 최종 커서 커서) {

 LinearLayout llDescricao = (LinearLayout) view 
       .findViewById(R.id.produtos_lldescricao); 
     LinearLayout llComponentes = (LinearLayout) view 
       .findViewById(R.id.produtos_llcomponentes); 
     LinearLayout llImage = (LinearLayout) view 
       .findViewById(R.id.produtos_llimage); 
     LinearLayout llQtVolume = (LinearLayout) view 
       .findViewById(R.id.produtos_llqtVolume); 
     LinearLayout llQtTroca = (LinearLayout) view 
       .findViewById(R.id.produtos_llqttroca); 
     RelativeLayout rlProdutos = (RelativeLayout) view 
       .findViewById(R.id.RelativeLayout_produtos); 
     LinearLayout ll3 = (LinearLayout) view 
       .findViewById(R.id.produtos_llcomponentes_3); 
     LinearLayout llCorGrade = (LinearLayout) view 
       .findViewById(R.id.produtos_llcorgrade); 
     LinearLayout llCor = (LinearLayout) view 
       .findViewById(R.id.produtos_llcor); 
     rlProdutos.removeView(llImage); 

     final ViewHolder holder = new ViewHolder(); 

     holder.spCor = (Spinner) view.findViewById(R.id.produtos_spCor); 
     holder.spGrade = (Spinner) view.findViewById(R.id.produtos_spGrade); 
     TextView tvCod = (TextView) view.findViewById(R.id.produtos_tvCod); 
     TextView tvDescricao = (TextView) view 
       .findViewById(R.id.produtos_tvDescricao); 
     ImageView ivFoto = (ImageView) view 
       .findViewById(R.id.produtos_ivProduto); 

     tvCod.setText(cursor.getString(cursor 
       .getColumnIndex("produto_codigo"))); 
     tvDescricao.setText(cursor.getString(cursor 
       .getColumnIndex("produto_descricao"))); 

     holder.etQtd = (EditText) view 
       .findViewById(R.id.produtos_etQuantidade); 

      holder.btnMaisUm = (Button) view 
        .findViewById(R.id.produtos_btnMais); 

      holder.btnMaisUm.setTag(holder.etQtd); 

      holder.btnMaisUm.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        Log.d("PRODUTO", "TRIGGER "+teste++); 
        Button button = (Button) v; 
        EditText et = (EditText) button.getTag(); 
        et.requestFocus(); 
        String qtdText = et.getText().toString(); 

        if (qtdText.equals("")) { 
         qtdText = temp; 
        }// end if 
        float qtd = Float.parseFloat(qtdText) + 1; 
        et.setText(String.valueOf(qtd)); 

       }// end onClick 
      }); 

     holder.etDesconto = (EditText) view 
       .findViewById(R.id.produtos_etDesconto); 
     // PEGAR DESCONTO VINDO DO PEDIDO ENVIADO PRA CA 
     holder.etDesconto.setText(String.valueOf(pedido.getPdesconto())); 
     holder.etDesconto.setOnFocusChangeListener(focusHandler); 
     int editaDesconto = Integer.valueOf(prop 
       .getProperty("config.edita_desconto")); 
     if (editaDesconto == 0) { 
      holder.etDesconto.setInputType(0); 
      holder.etDesconto.setEnabled(false); 
     } 

     /** 
     * CALCULAR UNITARIO ET UNITARIO 
     */ 
     holder.etUnitario = (EditText) view 
       .findViewById(R.id.produtos_etUnitario); 
     holder.etUnitario.setOnFocusChangeListener(focusHandler); 
     int editaUnitario = Integer.valueOf(prop 
       .getProperty("config.edita_unitario")); 
     if (editaUnitario == 0) { 
      holder.etUnitario.setInputType(0); 
      holder.etUnitario.setEnabled(false); 
     }// end if 

     /** 
     * TEXTVIEW TOTAL 
     */ 
     holder.tvTotal = (TextView) view 
       .findViewById(R.id.produtos_tvTotal); 

     holder.etQtd.setTag(R.id.etQuantidadeTroca, holder.etQtdTroca); 
     holder.etQtd.setTag(R.id.spCorKey, holder.spCor); 
     holder.etQtd.setTag(R.id.spGradeKey, holder.spGrade); 
     holder.etQtd.setTag(R.id.etDescontoKey, holder.etDesconto); 
     holder.etQtd.setTag(R.id.etUnitarioKey, holder.etUnitario); 
     holder.etQtd.setTag(R.id.etUnitarioTabelaKey, 
       holder.etUnitarioTabela); 
     holder.etQtd.setTag(R.id.tvTotalKey, holder.tvTotal); 
     holder.etQtd.setTag(R.id.produtoIdKey, 
       cursor.getLong(cursor.getColumnIndex("_id"))); 
     holder.etQtd.setOnFocusChangeListener(new FocusHandler()); 
     holder.etDesconto.setTag(holder.etQtd); 
     holder.etUnitario.setTag(holder.etQtd); 
     holder.uuidProduto = cursor.getString(cursor 
       .getColumnIndex("produto_uuid")); 


}// end bindView 
0

모든 setOnFocusChangeListener에 새 FocusHandler()을 설정해야합니다. FocusHandler classfocusedEditText 구성원은 focusHandler이라는 동일한 개체를 공유하기 때문에 각 행의 holder.etDescontoholder.etUnitario으로 수정할 수 있습니다.

+0

도움 주셔서 감사합니다하지만 그것은 간단한 확장 된 기본 어댑터를 구현하고 동일한 문제가 발생했기 때문에 그것이 스크롤되었을 때 listview의 렌더링에 문제가있는 것 같습니다. 참고 :이 테스트에서 ViewHolder 패턴을 사용하지 않았습니다. –

관련 문제