我使用ArrayAdapter在ListView中显示项目。此ListView中的每一行都拥有一个按钮。
每当用户点击其中一个按钮时,我就会启动一个AsyncTask来在后台进行一些处理。
到目前为止这是有效的。
现在我想在此期间显示自定义ProgressDialog。这里让我感到困惑的是静态方便法ProgressDialog.show()的第一个参数。在一项活动中,我通常在这里使用“Activityname.this”。但是我应该在适配器中使用什么呢。我尝试了来自适配器(崩溃),context.getApplicationContext等的上下文。没有任何工作 - 无论是崩溃还是被编译器拒绝。
今天我的问题是:我应该在这个参数中加入什么?
这是我的代码的精简部分:
public class MyAdapter extends ArrayAdapter<MyContainer> {
private class MyAsyncTask extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute () {
if (!isRunning) {
progressDialog = MyProgressDialog.show(?????,
null,
null,
true,
false);
}
}
@Override
protected Boolean doInBackground(final String... strings) {
boolean rc = false;
if (!isRunning) {
isRunning = true;
//
rc = true;
}
return rc;
}
@Override
protected void onPostExecute(final Boolean result) {
if (progressDialog != null) {
progressDialog.cancel();
}
progressDialog = null;
//
}
}
private class MyOnClickListener implements OnClickListener {
private MyContainer container;
public MyOnClickListener(final MyContainer container) {
this.container = container;
}
public void onClick(final View view) {
if (container != null) {
new MyAsyncTask().execute(container.getUrl());
}
}
private String appName = "";
private ArrayList<MyContainer> containers;
private Context context;
private boolean isRunning;
private int layout;
private MyProgressDialog progressDialog;
private Resources resources;
public MyAdapter(final Context context, final int layout, final ArrayList<MyContainer> containers, final long link_id) {
super(context, layout, containers);
this.context = context;
this.layout = layout;
this.containers = containers;
resources = context.getResources();
appName = resources.getString(R.string.txt_appname);
}
@Override
public View getView(final int position, final View contentView, final ViewGroup viewGroup) {
//
}
}
提前致谢。
编辑:清理项目后,使用适配器中的实例变量上下文。精氨酸!谢谢你的回答。
答案 0 :(得分:1)
嗨:如果你看到适配器的构造函数
,那就好了public MyAdapter(final Context context, final int layout, final ArrayList<MyContainer> containers, final long link_id) {
super(context, layout, containers);
this.context = context;
您传递了上下文,因此在适配器的一侧使用上下文:D来构建进度对话框