4

我多次遇到这个问题,我以不同的方式解决了这个问题,我不确定我是否以正确的方式解决了这个问题。我在以下示例中简化了问题。我知道我只能将数据传递给类,但我确实想传递 editText 因为我遇到了更难的 UI 控件的问题。

主要活动.java

public class mainactivity extends Activity {

    public EditText clickEditText;
    int count =0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        newTxt();
    }

    public void newTxt() {
        txt = new MyText(context);
        txt.updateTextEdit("Main Activity");
    }
}

我的文本.java

public class MyText
{
    private Context _context;

    // constructor
    public MyText(Context context) 
    {
        _context = context;
    }

    public void updateTextEdit(String str)
    {
        private EditText strEditText;
        strEditText= (EditText)findViewById(_context.R.id.editTextClick); // ????
        strEditText.setText(str + " and myTxt");
    }
} 

如果你能解释一下如何修复 updateTextEdit 函数。我通过了主要活动的上下文。如何更改编辑文本?非常感谢!!!

4

2 回答 2

1

如果你真的想这样做,你需要保存对 的引用Activity,而不是Context. 像这样:

public class MyText
{
    private Activity _activity;

    // constructor
    public MyText(Activity activity) 
    {
        _activity= activity;
    }

    public void updateTextEdit(String str)
    {
        private EditText strEditText;
        strEditText= (EditText)activity.findViewById(R.id.editTextClick);
        strEditText.setText(str + " and myTxt");
    }
}

newTxt()你需要改变:

txt = new MyText(context);

至:

txt = new MyText(this);

但是把这个方法放在你的活动中不是更容易吗?你为什么要把它放在另一个班级?如果它确实需要在另一个类中,您可以将该类设置为您的活动的内部类,您仍然可以访问活动的方法和成员变量。

于 2012-10-23T14:50:34.970 回答
0

这里有一个类似的问题 How to access Activity UI from my class?

你没有说你是如何获得上下文的,你应该在另一个类中使用this和获取。mainactivity不是上下文。

然后您可以调用runOnUIThread以执行 UI 更新。

于 2012-10-23T14:51:37.307 回答