Android 如何从异步任务管理活动

Android 如何从异步任务管理活动,android,android-asynctask,android-activity,roboguice,Android,Android Asynctask,Android Activity,Roboguice,我有两个活动(Activity1和Activity2)和一个异步任务(AsyncTask1) Activity1有一个按钮,点击该按钮可以控制Activity2,Activity2有一个AsyncTask,在该任务的onPostExecute()中,我想处理Activity1中的文本视图 例如: 活动1 public class Activity1 extends RoboSherlockActivity { @Inject (R.id.name) EditText name; @Inj

我有两个活动(
Activity1
Activity2
)和一个异步任务(
AsyncTask1

Activity1
有一个按钮,点击该按钮可以控制
Activity2
Activity2
有一个
AsyncTask
,在该任务的
onPostExecute()
中,我想处理
Activity1
中的
文本视图

例如:

活动1

public class Activity1 extends RoboSherlockActivity {
  @Inject (R.id.name) EditText name;
  @Inject (R.id.mybutton) Button button;

  public void onCreate (Bundle savedInstanceState) {
   ...
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent activity2 = new Intent(context, Activity2.class);
                startActivity(activity2);
            }
        });
   ....
  }
}
  Intent intent=new Intent(Activity.this,Activity2.class);  
  startActivityForResult(intent, 2);
活动2

 public class Activity2 extends RoboSherlockActivity {
    @InjectView (R.id.name) EditText secret;

....
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add("Save")
    return true;
}
...
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    if (menuItem.getTitle().toString().equalsIgnoreCase("Save")) {
        new AsyncTask1(this, secret.getText().toString()).execute();
    }
    return true;
  }
}
 Intent intent;
   @Override
   protected void onCreate(Bundle savedInstanceState)
   super.onCreate(savedInstanceState);
   setContentView(R.layout.second);
   intent = getIntent();
   ...// rest of the code
 }
异步任务1

public class AsyncTask1 extends RoboAsyncTask<String> {

   Activity2 activity;
   String secret;

   public AsyncTask1 (Activity2 activity, String secret) {
     this.activity = activity;
     this.secret = secret;
   }

   public String call() throws Exception {
     //call the server here
     return "";
   }

   protected void onSuccess(String result) {
     activity.finis();
     //HERE I WANT TO SET THE NAME: name.setText(result); //How can I do this??
   }
} 
公共类AsyncTask1扩展了RoboAsyncTask{
活动2活动;
串秘密;
公共异步任务1(活动2活动,字符串机密){
这个。活动=活动;
这个秘密;
}
公共字符串调用()引发异常{
//在这里呼叫服务器
返回“”;
}
成功时受保护的void(字符串结果){
activity.finis();
//在这里我想设置名称:NAME.setText(result);//我怎么做??
}
} 
问题

如何在异步任务的
onSuccess
中设置名称

Activity2有一个AsyncTask,在该任务的onPostExecute()中 处理Activity1中的TextView

不,你不能。您可以在Activtiy1中使用
startActivtiyForResult
,并更新textview

在活动中1

  Intent intent=new Intent(Activity.this,Activity2.class);  
  startActivityForResult(intent, 2);
然后

在活动中2

 Intent intent;
   @Override
   protected void onCreate(Bundle savedInstanceState)
   super.onCreate(savedInstanceState);
   setContentView(R.layout.second);
   intent = getIntent();
   ...// rest of the code
 }
onSuccess中

 protected void onSuccess(String result) {
   intent.putExtra("key",value);  
   setResult(2,intent);  
   activity.finish();
 }
试试这个

从asynctask store成功后,在Activity1中创建SharedReference,并在SharedReference&finish活动中生成结果


在Activity1的onResume中,从SharedReference获取值&如果该值不为null,则设置为name Textview..

我将尝试另一种方法。我不会尝试从AsyncTask更改Activity 1的元素,而是将意向从AsynTask发送到Activity 1

protected void onSuccess(String result) {
 activity.finish();
 Intent intent = new Intent("MY_CUSTOM_INTENT");
 activity.sendBroadcast(intent);
}

在活动中

  @Override
  public void onResume(){
    super.onResume();
    LocalBroadcastManager.getInstance(this).registerReceiver(myHandler, new IntentFilter("MY_CUSTOM_INTENT");
  }
 BroadcastReceiver myHandler= new BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {
          //CHANGE HERE THE TEXTVIEW
     }
 };

您可以使用静态变量来执行此操作:

public class Activity1 extends RoboSherlockActivity {
  ...

  public static Activity1 instance = null;

  public EditText getName(){
      return name;
  }

  public void onCreate (Bundle savedInstanceState) {
   ...
   instance = this;
   ....
  }

  public void onDestroy(){
    instance = null;
  }
}
并将此方法称为:

protected void onSuccess(String result) {
 activity.finis();
 Activity1.instance.getName.setText(result);
 //HERE I WANT TO SET THE NAME: name.setText(result); //How can I do this??
}