Как получить доступ к Activity UI из моего класса?

У меня есть действие, которое создает экземпляр объекта моего класса:

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 ???
    ...
}
--------------------------------------------------------------

Как использовать объекты UI в моем классе (который не расширяет Активность)? Должен ли я передать некоторый контекст в мой класс Points? Как именно я это делаю?

6 ответов


см. сообщение, я отредактировал его, чтобы исправить проблему

надеюсь, что это помогает :=)

вот редактирование :

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);    
            }
        });
    }
}

  1. код Points не может быть частным классом, не будучи внутренним классом. Поэтому ваш код даже не компилируется...
  2. передайте представление как параметр конструктору вашего 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
            }
        }
    }
    

вы должны сделать все и передать значение в действие для обработки пользовательского интерфейса вместо того, чтобы делать какие-либо связанные с пользовательским интерфейсом вещи в point stuff.


вы можете передать контекст основного действия (используя Points(getApplicationContext());) в класс в качестве параметра конструктора. Вы также можете передать определенные элементы пользовательского интерфейса, которыми хотите управлять.

лучший способ, чтобы сделать это, однако, может быть Points Не знаю о своей деятельности. Ваши действия назвать Points методы и выполните необходимые действия на основе вывода метода.


вы можете просто передать представление своему классу.

Points myPoints = new Points(myView);

private class Points
{
  private TextView mTextView;

  Points(TextView textView)
  {
     this.mTextView = textView;
  }
}

Я был в такой же беде.. я нашел простой способ..

  1. создать статическую переменную и функцию ...
  2. звонок из другого класса..

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);
   }
}

Условие_2.java

TestActivity.setMSG("this is text");