2012-04-12 20 views
7

Mi entorno de trabajo Eclipse se heliose, Android 1.6Cómo agregar editText.addTextChangedListener en TableLayout

He creado una TableLayout con columnas y filas agregó correctamente, cada célula tiene un TextView y uno EditarTexto y tengo un problema en la accediendo a cada celda y necesita agregar addTextChangedListener a cada editText dentro de la celda. Entonces, necesito cambiar el texto en inglés a texto índico. Sugiera una solución

/** 
* Here we are going to define the grid The Grid has 1. grid's value in the 
* particular position 2. 
*/ 

public void setGrid() { 

    String questionNumber[] = null; 

    Typeface fontface = Typeface.createFromAsset(getAssets(), "fonts/padmaa.ttf"); 
    /* 
    * Table layout for the crossword elements 
    */ 
    TableLayout tableLayout = (TableLayout) findViewById(R.id.crosswordTableLayout); 
    tableLayout.setGravity(Gravity.TOP); 
    tableLayout.setBackgroundColor(Color.WHITE); 
    tableLayout.setScrollContainer(true); 

    for (int i = 0; i < sizeOfGrid; i++) { 
     /* 
     * This table row params is used to set the layout params alone we 
     * are not going to use this anywhere 
     */ 
     TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     tableRowParams.setMargins(1, 1, 1, 1); 
     tableRowParams.height = 30; 
     tableRowParams.gravity = Gravity.TOP; 

     /* 
     * Defining the row element for the crossword 
     */ 
     TableRow tableRow = new TableRow(this); 
     tableRow.setBackgroundColor(Color.WHITE); 
     tableRow.setPadding(1, 0, 0, 0); 
     tableRow.setGravity(Gravity.TOP); 
     tableRow.setLayoutParams(tableRowParams); 

     for (int j = 0; j < sizeOfGrid; j++) { 

      /* 
      * (1).Here we are defining headerTextView to set the clue 
      * numbers. 
      * 2).columnEditText = a edit text view used to get the user 
      * i/p data 
      */ 
      TextView headerTextView = new TextView(this); 
      columnEditText = new EditText(this); 

      headerTextView.setGravity(Gravity.TOP); 
      headerTextView.setTextSize(10); 
      headerTextView.setEnabled(false); 
      headerTextView.setHeight(30); 
      headerTextView.setWidth(10); 
      headerTextView.setTextColor(Color.BLACK); 

      /* Override the edittext that has been created */ 
      columnEditText = (EditText) getLayoutInflater().inflate(R.layout.tablexml, null); 
      columnEditText.setHeight(30); 
      columnEditText.setWidth(25); 
      /* 
      * LinearLayout to arrange the two text view in a vertical 
      * position 
      */ 
      LinearLayout headerLinearLayout = new LinearLayout(tableRow.getContext()); 
      headerLinearLayout.setOrientation(LinearLayout.VERTICAL); 
      headerLinearLayout.addView(headerTextView); 

      /* 
      * LinearLayout to arrange the first Linearlayout and Edit text 
      * in a horizontal position 
      */ 
      LinearLayout cellLinearLayout = new LinearLayout(tableRow.getContext()); 
      cellLinearLayout.setOrientation(LinearLayout.HORIZONTAL); 
      cellLinearLayout.addView(headerLinearLayout); 
      cellLinearLayout.addView(columnEditText); 
      /* 
      * Here we are setting the table's vertical border by some 
      * workaround methods 
      */ 
      cellLinearLayout.setLayoutParams(tableRowParams); 
      /* 
      * the column with complete black 
      */ 
      if (cellValueArr[i][j] == null) { 
       columnEditText.setBackgroundColor(Color.BLACK); 
       headerTextView.setBackgroundColor(Color.BLACK); 
       headerTextView.setGravity(Gravity.TOP); 
       tableRow.setBackgroundColor(Color.BLACK); 
       columnEditText.setEnabled(false); 
      } else { 
       /* 
       * column with values and question numbers 
       */ 
       tableRow.setBackgroundColor(Color.BLACK); 
       if (quesNumArr[i][j] == null) { 
        columnEditText.setBackgroundColor(Color.WHITE); 
        headerTextView.setBackgroundColor(Color.WHITE); 
       } else if (quesNumArr[i][j] != null) { 
        /* 
        * column without question number 
        */ 
        questionNumber = quesNumArr[i][j].split("~"); 
        quesArrList.add(questionNumber[1]); 
        headerTextView.setText(questionNumber[1]); 
        headerTextView.setTextColor(Color.BLACK); 
        headerTextView.setBackgroundColor(Color.WHITE); 
        columnEditText.setBackgroundColor(Color.WHITE); 
       } 

      } 
      columnEditText.setId(i); 
      headerTextView.setId(i); 

      /* add the linear layout to the row values */ 
      tableRow.addView(cellLinearLayout); 

      int childCount = tableRow.getChildCount(); 
      System.out.println("Child Count ::" + childCount); 

      LinearLayout linearChild = (LinearLayout) tableRow.getChildAt(columnEditText.getId()); 
      colText = (EditText) linearChild.getChildAt(1); 
      System.out.println("GET ID " + linearChild.getChildAt(1).getId()); 

      colText.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void onTextChanged(CharSequence seq, int start, int before, int count) { 
        // TODO Auto-generated method stub 
        if (seq.length() > 0 & before == 0) { 
         final String charSequence = String.valueOf(seq); 
         final String engChar = String.valueOf(seq.charAt(seq.length() - 1)); 
         println("GUJ :: currentlatin ===> " + engChar + " :: charSequence ==>" + seq); 
         // Method For Type Char 
         List softList = conv.getSoftKeyPressForChar(engChar, getApplicationContext(), seq); 
         charSeq = (String) softList.get(0); 
         Typeface fontface1 = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/padmaa.ttf"); 
         colText.setTypeface(fontface1, Typeface.NORMAL); 
         colText.setText(charSeq); 
         // for placing the cursor position 
         colText.clearFocus(); 
         colText.requestFocus(); 

        } 
       } 

       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        // TODO Auto-generated method stub 
        System.out.println("AFTER TEXT CHANGE"); 
       } 
      }); 

     } 
     /* add the row values to the table layout */ 
     tableLayout.addView(tableRow); 
    } 
} 
+0

¿Por qué lo hace programáticamente? En su lugar, puede crear un adaptador personalizado para ListView que tenga 1 edittext y textview para cada elemento, sería fácil en el diseño y la parte de desarrollo de ambos. –

+0

gracias por la respuesta, en realidad estamos creando una aplicación de crucigramas, así que estoy haciendo esto. Esa fuente de crucigramas está en caracteres gujarati. También necesito cambiar el texto en la entrada de los usuarios. Es una especie de transliteración involucrada aquí. –

+0

Eso significa que tiene filas * pantalla cols, digamos por ejemplo 4 * 4 –

Respuesta

0

No he revisado el código en su totalidad. Pero desde mi comprensión inicial, puede hacerlo en cualquiera de estas formas,

  1. Como alguien ha mencionado antes, ir a dar un gridview. No pude hacer gran cosa de ese tema desde el último comentario a la pregunta, pero si es un problema de desplazamiento, podrías haber probado un margen de diseño inferior a unos 5 dp, para que no se recorte (si eso es lo que quería decir)

  2. Continuando con el diseño de tabla, cree TextWatcher() una vez y añádalo secuencialmente en un bucle. Puede ser bueno, si puedes establecer Id, o establecer la etiqueta para cada elemento como, primero editarTexto obtiene el nombre, "editarTexto1", luego, "editarTexto2", etc. Entonces, en un bucle, puede acceder a cada elemento según el índice de bucle.

Cuestiones relacionadas