java编辑另一个类的textfield

时间:2014-01-25 15:32:43

标签: java android

我有A类和B类.A类在这里调用B类:

public void onClick(View v){
    //respond to clicks
    new MyTask().execute();

在这个新任务中,我做了一些网络垃圾,最后找到了一个我希望传回A类的字符串。

但我似乎无法做到。我尝试做类似classA.textfield.setText(text)的操作,但是没有用。而且看起来类也无法返回值。我已经看到一些标记为相似的东西,但我不认为它们可以解决我的问题,如果他们这样做,我不明白如何实现它们。我觉得这必须有一个非常简单的方法来做到这一点,但我见过的唯一的事情就是声音甚至远远相似的是制作A级的新版本,但这听起来非常错误......

4 个答案:

答案 0 :(得分:2)

这是CallbackActionListener编码模式显示其强度的地方。

在MyTask类中,在类声明后添加:

public interface MyTaskActionListener{
    public void didFinish(String result);
}

将成员添加到MyTask类:

private MyTaskActionListener listener;

现在,向MyTask添加方法setActionListener

public void setActionListener(MyTaskActionListener l){
    listener = l;
}

接下来,在启动MyTask之前,设置监听器:

MyTask task = new MyTask();
task.setActionListener(new MyTaskActionListener(){
    public void didFinish(String result){
        yoirTextView.setText(result);
    }
});

最后但并非最不重要的是,在MyTask的onPostExecute中调用didFinish():

protected void onPostExecute(String result){
    listener.didFinish(result);
}

答案 1 :(得分:0)

在B类中创建一个方法,允许您修改textfield并在类B对象上调用该方法(您应该将textfield声明为数据成员) 否则,您可以将textfield的可见性(必须声明为数据成员)设置为public,这是一种不好的做法

答案 2 :(得分:0)

你应该在你的班级做一个建设者,如下所示:

public class MyTask extends AsyncTask<Void, Void, String> {
        TextView textView;

        public MyTask(TextView tv) {
            this.textView = tv;
        }

        @Override
        protected String doInBackground(Void... params) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            textView.setText(result);
        }
    }

正如您所看到的,您在onPostExecute方法中更改了TextView的值。

你可以从以下任何地方调用它:

new MyTask(tv).execute();

希望有助于。

答案 3 :(得分:-1)

使用监听器接口。

public interface CompleteListener{
  public void onComplete(String result);
}

public class A implements CompleteListener{

   public void onComplete(String result){
      // do something
   }
}

public class B extends AsyncTask {
    CompleteListener listener;

   public B (CompleteListener listener){
       this.listener = listener;
   }

   onPostExecute(String result){
      listener.onComplete(result);
   }

}