Вывод массива в cardview

230
09 января 2018, 14:20

Получаю данные из 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);
    }
}
Answer 1

Данные в адаптере у вас пусты. Вы пустой список отображаете и параллельно скачиваете инфу из сети. После завершения загрузки вы её не передаёте в адаптер и не уведомляете его о изменениях в данных.

Answer 2

Попробуйте так: 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

READ ALSO
unit тестирование

unit тестирование

Как бы Вы протестировали данный метод?

183
Android - Retrofit: Не грузит изображения на сервер

Android - Retrofit: Не грузит изображения на сервер

Создал приложение, которое грузит изображения на сервер, использую библиотеку Retrofit

297
Ошибка компиляции Collections.synchronizedList: synchronizedList (java.util.List&lt;T&gt;) in Collections&#160;cannot be applied to java.util.ArrayLis

Ошибка компиляции Collections.synchronizedList: synchronizedList (java.util.List<T>) in Collections cannot be applied to java.util.ArrayLis

Пишу клиент — серверное приложениеДля учета подключившихся клиентов хочу использовать ArrayList

177
Отсортировать массив в JAVA (цифры + текст)

Отсортировать массив в JAVA (цифры + текст)

Как отсортировать массив по числам, которые идут перед URlДопустим есть данные:

282