Я новичок в программировании Android, так что, возможно, это глупый вопрос ...
Я много читал об асинхронной задаче, чтобы добавить индикатор выполнения, но не могу найти нужное решение:
Мне нужно показать сетку, но мне нужно искать данные на изображениях и текстах, чтобы показать в ней.
Поэтому, если я загружаю относительные данные в массив в асинхронной задаче, адаптер сетки не имеет данных и вылетает.
В противном случае, если я добавлю диалог прогресса в метод oncreate gridview, он будет ждать загрузки данных, но не отображать панель progess (только в конце загрузки данных, а не во время нее).
Так что я не знаю правильный подход.
Я думал начать с предыдущего занятия только для того, чтобы показать диалоговое окно прогресса, загрузить данные и, в конце, запустить просмотр таблицы, но мне не кажется, что это экономический подход ...
что ты думаешь?
Итак: Как я могу прикрепить данные к адаптеру из задачи asynk?
Я пытался с notyfydatasetchange, но он не работает
в моем методе onCreate у меня есть:
mAdapter = новый ImageAdapter (это);
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();
}
}