2011-05-17 13 views
12

tengo una actividad que crea una instancia de objeto de mi clase:¿Cómo acceder a la IU de actividad de mi clase?

file MyActivity.java: 
public class MyActivity extends Activity { 
    TextView myView = (TextView)findViewById(R.id.myView); 
    ... 
    Points myPoints new Points(); 
    ... 
} 
-------------------------------------------------------------- 

file Points.java: 
private class Points { 
    ... 
    HOW TO USE myView HERE ??? 
    ... 
} 
-------------------------------------------------------------- 

¿Cómo utilizar los objetos de interfaz de usuario en mi clase (que no se extiende un Actividad)? ¿Debo pasar algo de contexto a mi clase Puntos? ¿Cómo lo hago, exactamente?

Respuesta

17

ver que publique, he editado, para corregir el problema

creo que sirve: =)

aquí es la edición:

file MyActivity.java: 
    public class MyActivity extends Activity { 
    TextView myView ; 
    protected void onCreate(android.os.Bundle savedInstanceState) { 
     myView = (TextView)findViewById(R.id.myView); 
      Points myPoints = new Points(this); 
      myPoints.displayMsg("Hello World !!!"); 
    } 
    } 

-------------------------------------------------------------- 

file Points.java: 
private class Points { 
    protected MyActivity context; 
    //add a constructor with the Context of your activity 
    public Points(MyActivity _context){ 
     context = _context; 
    } 

    public void displayMsg(final String msg){ 
     context.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       context.myView.setText(msg);  
      } 
     }); 
    } 
} 
+0

Disculpe, ¿qué problema solucionó? – MarcoS

+1

@Marcos: según entiendo, quiere acceder a su actividad desde los puntos de su clase, lo que significa que desea modificar y actualizar sus TextViews o sus ImageViews, etc., he editado su Código, pero los Administradores no aceptan la edición, la publicaré ahora en mi respuesta, espere un segundo :) – Houcine

+0

¿Por qué la editaría y no publicaría una respuesta? wtf XD Fantástica respuesta, gracias. – Sipty

1

Debería hacer todo lo posible y devolver el valor a la actividad para manejar la IU en lugar de hacer cualquier cosa relacionada con la interfaz de usuario en este aspecto.

1

Puede pasar el contexto de la actividad principal (usando Points(getApplicationContext());) a la clase como parámetro de constructor. También puede pasar los elementos de IU específicos que desea manipular.

Una forma mejor de hacerlo, sin embargo, puede ser que el Points no conozca la Actividad. Haga que su actividad llame al Points métodos y tome las medidas necesarias según el resultado del método.

1

Podrías pasar la vista a tu clase.

Points myPoints = new Points(myView); 

private class Points 
{ 
    private TextView mTextView; 

    Points(TextView textView) 
    { 
    this.mTextView = textView; 
    } 
} 
4
  1. Su Points no puede ser una clase privada sin ser una clase interna. Por lo que su código no tiene ni siquiera compilar ...
  2. Pasar la vista como parámetro al constructor de la clase Points:

    public class MyActivity extends Activity { 
        TextView myView = (TextView)findViewById(R.id.myView); 
        Points myPoints new Points(myView); 
    
        private class Points { 
         public Points(TextView view) { 
          // todo 
         } 
        } 
    } 
    
1

yo estaba en mismo problema .. he encontrado la forma más sencilla ..

  1. crea una variable estática y la función ...
  2. llamada de otra clase ..

TestActivity. java

public class TestActivity extends Activity { 

    static EditText edit_text1; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     ..... 

     edit_text1 = (EditText) findViewById(R.id.edit_text1); 

     ..... 
    } 

    public static void setMSG(String str) 
    { 
     edit_text1.setText(str); 
    } 
} 

Test2.ja va

TestActivity.setMSG("this is text"); 
+20

Adiós programación orientada a objetos ... –

+2

la peor sugerencia que he leído ... – Yurets

+0

dnt crear contextos estáticos –

Cuestiones relacionadas