Получаю данные из JSON страницы, записываю их в массив, при выводе в cardview ничего не выводит (белый экран). Смотрю по logcat данные в массиве есть.
Заранее спасибо за помощь.
ObjectsFragment
public class ObjectsFragment extends Fragment {
private static final String TAG = "ObjectsFragment";
private RecyclerView mRecyclerView;
private List<Object> mObjects;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FetchData process = new FetchData();
process.execute();
}
public static ObjectsFragment newInstance() {
return new ObjectsFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_objects, container, false);
mRecyclerView = (RecyclerView)v.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
ObjectAdapter adapter = new ObjectAdapter(mObjects, getContext());
mRecyclerView.setAdapter(adapter);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(linearLayoutManager);
return v;
}
ObjectAdapter
public class ObjectAdapter extends RecyclerView.Adapter<ObjectAdapter.ViewHolder> {
private List<Object> mObjectList;
private Context mContext;
public ObjectAdapter(List<Object> objects, Context context) {
this.mObjectList = objects;
this.mContext = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_objects, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ObjectAdapter.ViewHolder holder, int position) {
final Object object = mObjectList.get(position);
holder.mName.setText(object.getName());
holder.mAddress.setText(object.getAddress());
holder.mSalesPlan.setText(object.getSalesPlan());
}
@Override
public int getItemCount() {
if (mObjectList != null) {
return mObjectList.size();
}
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView mName;
public TextView mAddress;
public TextView mCurrentSales;
public TextView mSalesPlan;
public ViewHolder(View itemView) {
super(itemView);
mName = (TextView) itemView.findViewById(R.id.name_text_view);
mAddress = (TextView) itemView.findViewById(R.id.address_text_view);
mCurrentSales = (TextView) itemView.findViewById(R.id.current_sales_text_view);
mSalesPlan = (TextView) itemView.findViewById(R.id.sales_plan_text_view);
}
}
Данные в адаптере у вас пусты. Вы пустой список отображаете и параллельно скачиваете инфу из сети. После завершения загрузки вы её не передаёте в адаптер и не уведомляете его о изменениях в данных.
Попробуйте так:
1. В ObjectAdapter
добавьте метод
public void setData(List<Object> data){
mObjectList = data;
}
2. В FetchData
(судя по всему это наследник AsyncTask
?) переопределите onPostExecute
так
@Override
protected void onPostExecute(List<Object> newData){
adapter.setData(newData);
adapter.notifyDataSetChanged();
}
При этом третьим параметром AsyncTask
должен быть List<Object>
и это же должен возвращать doInBackground
. adapter
- это тот, что создан в ObjectFragment
, его нужно сделать доступным в классе FetchData
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Создал приложение, которое грузит изображения на сервер, использую библиотеку Retrofit
Пишу клиент — серверное приложениеДля учета подключившихся клиентов хочу использовать ArrayList
Как отсортировать массив по числам, которые идут перед URlДопустим есть данные: