Подтвердить что ты не робот

Как получить доступ к пользовательскому интерфейсу активности из моего класса?

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

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

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

4b9b3361

Ответ 1

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

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

здесь находится Edit:

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Points myPoints = new Points(myView);

private class Points
{
  private TextView mTextView;

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

Ответ 6

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

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

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

Ответ 7

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

файл 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 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 implementation of updateTextView()
        myListener.updateTextView(points);
    }

}

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