我有一个活动,它创建了我的类的对象实例:
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类吗?我该怎么办?
答案 0 :(得分:18)
看到你的帖子,我已经编辑过,以解决问题
希望它有所帮助:=)
这是编辑:
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 :(得分:4)
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
}
}
}
答案 2 :(得分:1)
你应该做所有事情并将值传递给活动来处理UI,而不是在点内容中做任何与UI相关的东西。
答案 3 :(得分:1)
您可以将主Activity的上下文(使用Points(getApplicationContext());
)作为构造函数参数传递给类。您还可以传递要操作的特定UI元素。
然而,更好的方法是让Points
不了解活动。让您的Activity调用Points
方法,并根据方法输出采取必要的操作。
答案 4 :(得分:1)
您可以将视图传递给您的班级。
Points myPoints = new Points(myView);
private class Points
{
private TextView mTextView;
Points(TextView textView)
{
this.mTextView = textView;
}
}
答案 5 :(得分:0)
我遇到了同样的麻烦.. 我找到了简单的方法..
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);
}
}
TestActivity.setMSG("this is text");
答案 6 :(得分:0)
可以使用界面工作
文件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
可以被触发/由于缺少更好的条款而从外部类发送消息以更新活动UI。如果所有必要的事情只是调用Points类中返回某物的方法,这可能会过大了