Eri*_*ric 2 android menuitem android-asynctask actionbarsherlock
我有一个刷新按钮,我希望根据情况可见.
单击" 刷新"按钮时,我可以使其不可见而不会出现问题,但是,一旦该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;
}
Run Code Online (Sandbox Code Playgroud)
您可以在任务的构造函数中传递项目,存储它并使其在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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
然后:
new DownloadNewsTask(item).execute();
Run Code Online (Sandbox Code Playgroud)
如果项目被定义为您的活动的内部类,您还可以将该项目作为您的活动类的成员并从您的任务访问它:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |