2014-02-26 28 views
0

我有两个活动(Activity1Activity2)和一个的AsyncTask(AsyncTask1如何从的AsyncTask

Activity1管理活动有一个按钮,在点击控制权交给Activity2Activity2AsyncTask并在该任务的onPostExecute()我想处理Activity1中的TextView

实施例:

活性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); 
      } 
     }); 
    .... 
    } 
} 

活性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; 
    } 
} 

AsyncTask1

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

问题

如何在AsyncTask的onSuccess中设置名称?

回答

0

Activity2有一个AsyncTask,并在该任务的onPostExecute()我想要 来处理Activity1中的TextView。

不,你不能。您可以在Activtiy1使用startActivtiyForResult和更新的TextView

在活动1

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

然后

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
      super.onActivityResult(requestCode, resultCode, data); 

       // check if the request code is same as what is passed here it is 2 
       if(requestCode==2) 
        { 
         String message=data.getStringExtra("key"); 
         textView1.setText(message); 

        } 

} 

在活性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(); 
} 
0

试试这个...

创建一个从商店的AsyncTask结果sharedPreference &完成活动在活动1一个sharedPreference上的成功。

在活动1中的onResume从sharedPreference &获得的价值,如果它不为空,设置为命名的TextView ..

0

我想尝试另一种方法。我没有尝试从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 
    } 
}; 
0

可以使用静态变量这样做:

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