【发布时间】:2011-09-24 14:33:32
【问题描述】:
我是 android 编程的初学者,所以也许这是一个愚蠢的问题... 我阅读了很多关于异步任务以添加进度条的信息,但我找不到我需要的解决方案:
我必须显示一个网格视图,但我需要搜索图像和文本上的数据以显示在其中。 因此,如果我在异步任务的数组中加载相关数据,则网格的适配器没有数据并崩溃。 否则,如果我将进度对话框放在 gridview 的 oncreate 方法中,它会等待加载数据但不显示进度条(它只是在加载数据结束时,而不是在加载数据期间)。 所以我不知道正确的方法。
我想从以前的活动开始,只是为了显示进度对话框,加载数据,最后启动 gridview,但在我看来这不是一种经济的方法......
你怎么看?
那么:如何将数据从异步任务附加到适配器? 我尝试了 notyfydatasetchange 但它不起作用
在我的 onCreate 方法中,我有: mAdapter = new ImageAdapter(this); mGrid.setAdapter(mAdapter);
但是同一个适配器构造函数需要数据...(至少是对象的数量...)
这是我的适配器:
public class ImageAdapter extends BaseAdapter{
Context mContext;
public final int ACTIVITY_CREATE = dirObjList.size()*2;
public ImageAdapter(Context c){
mContext = c;
map = new HashMap<Integer,SoftReference<Bitmap>>();
}
public Map<Integer,SoftReference<Bitmap>> map;
@Override
public int getCount() {
return dirObjList.size();
}
public RowData getItem(int position) {
return dirObjList.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
RowData currDirObj= getItem(position);
if(convertView==null){
LayoutInflater li = getLayoutInflater();
convertView = li.inflate(R.layout.icon, null);
holder = new ViewHolder();
holder.tv = (TextView)convertView.findViewById(R.id.icon_text);
holder.iv = (ImageView)convertView.findViewById(R.id.icon_image);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
holder.iv=setThumbs(holder.iv,position);
holder.tv.setText(currDirObj.mTitle);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences indexPrefs = getSharedPreferences("currentIndex",
MODE_PRIVATE);
SharedPreferences.Editor indexEditor = indexPrefs.edit();
indexEditor.putInt("currentIndex", 0);
SharedPreferences drPrefs = getSharedPreferences("currentDir",
MODE_PRIVATE);
SharedPreferences.Editor drPath = drPrefs.edit();
drPath.putString("currentDir", dirObjList.get(position).mDetail);
drPath.commit();
final Intent intent = new Intent(ImageGrid.this, SpeakinGallery.class);
startActivity(intent);
}
});
return convertView;
}
}
这是我的异步任务
public class MyTask extends AsyncTask<Void, Void, String> {
ProgressDialog progress;
public MyTask(ProgressDialog progress) {
this.progress = progress;
}
public void onPreExecute() {
progress.show();
}
public String doInBackground(Void...unused) {
getSubDirs(startDIRECTORY);
return "foo";
}
public void onPostExecute(Void unused) {
progress.dismiss();
//mAdapter.notifyDataSetChanged();
}
}
【问题讨论】:
-
你的异步任务是什么样的?
标签: android multithreading gridview progress-bar android-asynctask