Как получить доступ к пользовательскому интерфейсу активности из моего класса?
У меня есть действие, которое создает экземпляр объекта моего класса:
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? Как мне это сделать?
Ответы
Ответ 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, который возвращает что-то