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??
}