Как получить доступ к интерфейсу действий из моего класса? - PullRequest
14 голосов
/ 17 мая 2011

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

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

Как использовать объекты пользовательского интерфейса в моем классе (который не расширяет действие)?Должен ли я передать некоторый контекст моему классу очков?Как мне это сделать, точно?

Ответы [ 7 ]

18 голосов
/ 17 мая 2011

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

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

вот правка:

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);    
            }
        });
    }
}
4 голосов
/ 17 мая 2011
  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
            }
        }
    }
    
1 голос
/ 17 мая 2011

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

Points myPoints = new Points(myView);

private class Points
{
  private TextView mTextView;

  Points(TextView textView)
  {
     this.mTextView = textView;
  }
}
1 голос
/ 17 мая 2011

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

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

1 голос
/ 17 мая 2011

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

0 голосов
/ 06 декабря 2018

Может работать с использованием интерфейса

файл MyActivity.java:

public class MyActivity extends Activity implements Points.MyListener {

    TextView myView;
    ... onCreate(...){
        myView = (TextView)findViewById(R.id.myView);
        Points myPoints  = new Points();

        //pass in MyActivity's instance of the listener
        myPoints.addListener(this);
    }

    @Override
    public void updateTextView(String message){
        myView.setMessage(message);
    }
}

файл Points.java:

public class Points {

    public Points(){

    }

    public interface MyListener{
        void updateTextView(String message);
    }
    MyListener myListener;

    public void addListener(MyListener listener){
        myListener = listener;
    }

    public void updatePoints(){
        //do some operations in calculatePoints()
        String points = calculatePoints();
        //update views using MyActivity's implementation of updateTextView()
        myListener.updateTextView(points);
    }

}

Делая это таким образом, events можно вызывать / отправлять сообщения, из-за отсутствия лучших условий, из внешнего класса для обновления пользовательского интерфейса Activity.Это может быть излишним, если все, что нужно sb - это вызвать метод в классе Points, который возвращает что-то

0 голосов
/ 19 ноября 2012

у меня были те же проблемы .. я нашел простой способ ..

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

Test2.java

TestActivity.setMSG("this is text");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...