У меня есть фрагмент, с GridView загруженный с помощью CustomAdapter (расширение BaseAdapter). Данные извлекаются с сервера, и, следовательно, я пытаюсь вызвать notifyDataSetChanged на адаптере после завершения загрузки. Но GridView не загружает контент после загрузки.GridView CustomAdapter notifyDataSetChanged issue issue
Вот несколько моих фрагментов кода:
GridView gridview;
CustomAdapter mCustomAdapter;
List<Item> listItems = new ArrayList<Item>();
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
....
....
mCustomAdapter = new CustomAdapter(activity, listItems);
gridview = (GridView) view.findViewById(R.id.gridview);
gridview.setAdapter(mCustomAdapter);
// This is the call for retrieving data from Server
checkRefreshTimeAndGetData();
return view;
}
После получения данных, я звоню notifyDataSetChanged() в приведенном ниже способом:
public void checkRefreshTimeAndGetData(){
....
....
listItems.clear();
if (!mMainTableDbAdapter.isTableEmpty(
prefs.getInt(Const.Prefs.MAIN_INDEX, DEFAULT_VALUE),
prefs.getInt(Const.Prefs.SUB_INDEX, DEFAULT_VALUE)))
listItems = mMainTableDbAdapter.getTitles(
prefs.getInt(Const.Prefs.MAIN_INDEX, DEFAULT_VALUE),
prefs.getInt(Const.Prefs.SUB_INDEX, DEFAULT_VALUE));
// At this point, i checked if listItems has values,
// and it has 100 items in it. So, its not empty.
mCustomAdapter.notifyDataSetChanged();
}
CustomAdapter:
public class CustomAdapter extends BaseAdapter {
private List<Item> items;
private LayoutInflater vi;
private List<Boolean> selectedState = new ArrayList<Boolean>();
String imagepath = "";
int curPos = 0;
public CustomAdapter(Context context, List<Item> items) {
this.items = items;
vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView,
final ViewGroup parent) {
....
....
}
}
Что я делаю неправильно? если требуется какой-либо другие данные, пожалуйста, дайте мне знать ..
Хорошо, но есть ли причина, почему мой код выше не работает? Просто хочу знать .. Есть ли проблемы с моим адаптером? –
@ VamsiChalla 'notifyDataSetChanged();' ничего не изменит. Вы должны работать с исходной ссылкой 'List' remove/add items на этот' List'. ИЛИ другим способом создается все «новый объект адаптера» и снова назначается «List». Кстати ваш код в порядке. –