Android 如何从我的班级访问活动UI?
我有一个创建类的对象实例的活动:Android 如何从我的班级访问活动UI?,android,android-context,Android,Android Context,我有一个创建类的对象实例的活动: file MyActivity.java: public class MyActivity extends Activity { TextView myView = (TextView)findViewById(R.id.myView); ... Points myPoints new Points(); ... } ---------------------------------------------------------
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类传递一些上下文吗?确切地说,我该怎么做?您应该做所有事情,并将值传递回活动以处理UI,而不是在point stuff中执行任何与UI相关的操作。您可以将主活动的上下文(使用
Points(getApplicationContext();
)作为构造函数参数传递给类。您还可以传递要操作的特定UI元素
但是,更好的方法可能是让
点
不知道该活动。让您的活动调用指向方法,并根据方法输出采取必要的操作。您可以将视图传递给您的类
Points myPoints = new Points(myView);
private class Points
{
private TextView mTextView;
Points(TextView textView)
{
this.mTextView = textView;
}
}
点
不能是私有类而不是内部类。所以你的代码甚至没有编译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
}
}
}
回头见,我已经编辑过了,来解决这个问题 希望有帮助:=) 以下是编辑:
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);
}
});
}
}
我也有同样的麻烦。。
我找到了简单的方法
Test2.java
可以使用接口工作 文件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);
}
}
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);
}
}
文件点。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);
}
}
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);
}
}
通过这种方式,可以从外部类触发事件/发送消息(缺少更好的术语),以更新活动UI。如果sb只需要在Points类中调用一个返回某些内容的方法,那么这可能太过分了。对不起,你解决了哪个问题?@Marcos:据我所知,你想从类点访问你的活动,也就是说,你想修改和更新你的TextView或ImageView等,我已经编辑了你的代码,但是管理员不接受编辑,我现在将在我的答案中发布它,等等:)你为什么编辑它而不发布答案?wtf XD回答得很好,谢谢。@Sipty:我编辑了他的问题让他理解,因为我不想复制粘贴答案中的所有代码,然后我在我的答案中为其他人添加了编辑过的部分:我正在尝试将此应用于我创建的应用程序,作为Firebase“入门”指南的一部分。我可以接收消息并在日志中看到它们。对于监听器,当应用程序是后台的时候,我甚至在通知中看到它们。但是现在我想用收到的消息更新textView。问题是Firebase消息服务显然是由magic实例化的,我没有机会将其传递给我的MainActivity上下文?dnt生成静态上下文