我有一个刷新按钮,我想根据情况使其可见。
单击"刷新"按钮时,我可以毫无问题地使其不可见,但是,一旦AsyncTask
过程完成,我将无法使其再次可见。我无法将MenuItem
值传递回AsyncTask
。
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getSupportMenuInflater().inflate(R.menu.refresh_action_provider, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_refresh:
item.setVisible(false); //hide refresh button
setSupportProgressBarIndeterminateVisibility(true);
Toast.makeText(getApplicationContext(), "REFRESH CLiCKED", Toast.LENGTH_SHORT).show();
new DownloadNewsTask().execute();
return true;
}
return false;
}
您可以在任务的构造函数中传递您的项目,存储它并使它onPostExecute
方法中可见:
public class DownloadNewsTask extends AsyncTask<...> {
private final MenuItem item;
public DownloadNewsTask(MenuItem item) {
this.item = item;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
item.setVisible(true);
}
...
}
然后:
new DownloadNewsTask(item).execute();
您还可以让该项成为活动类的成员,如果它被定义为活动的内部类,则可以从任务访问它:
public class TestActivity extends Activity {
protected MenuItem refreshItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getSupportMenuInflater().inflate(R.menu.refresh_action_provider, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_refresh:
this.refreshItem = item;
item.setVisible(false); // hide refresh button
setSupportProgressBarIndeterminateVisibility(true);
Toast.makeText(getApplicationContext(), "REFRESH CLiCKED", Toast.LENGTH_SHORT).show();
new DownloadNewsTask().execute();
return true;
}
return false;
}
public class DownloadNewsTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// your stuff...
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
refreshItem.setVisible(true);
}
}
}