RecyclerView notifyDataSetChanged no funciona después de la consulta de análisis
Estoy en un fragmento tratando de actualizar mi vista de reciclador, después de consultar Parse para algunos datos. En el método done
de la consulta llamo notifyDataSetChagned
, pero la lista nunca se muestra
package com.garciaericn.t2d.fragments; public class DevicesCardViewFragment extends Fragment implements View.OnClickListener { private OnFragmentInteractionListener mListener; private BatteryHelper mBatteryHelper; Intent mBatteryStatus; private RecyclerView mRecyclerView; private DeviceAdapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; private List<Device> mDevices; public DevicesCardViewFragment() { // Required empty public constructor mDevices = new ArrayList<Device>(); } public static DevicesCardViewFragment newInstance() { // Bundle parameters is necessary return new DevicesCardViewFragment(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get arguments getDevices(); mBatteryHelper = new BatteryHelper(getActivity()); IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); mBatteryStatus = getActivity().registerReceiver(null, intentFilter); // Update stats of current device. Toast.makeText(getActivity(), "Battery level: " + mBatteryHelper.getCurrentBatteryLevel() + "%", Toast.LENGTH_LONG).show(); // Update device stats } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_devices_list, container, false); mListener.showAd(); // Obtain recycler view mRecyclerView = (RecyclerView) view.findViewById(R.id.devices_recycler_view); mRecyclerView.setHasFixedSize(true); mAdapter = new DeviceAdapter(getActivity(), mDevices); // Set adapter mRecyclerView.setAdapter(mAdapter); // Set layout manager mLayoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(mLayoutManager); return view; } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnFragmentInteractionListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } public List<Device> getDevices() { ParseQuery<Device> query = ParseQuery.getQuery(Device.DEVICES); // new ParseQuery<Device>(Device.DEVICES); query.whereEqualTo("deviceUser", ParseUser.getCurrentUser()); query.findInBackground(new FindCallback<Device>() { @Override public void done(List<Device> devices, ParseException e) { if (e == null) { // Loop through return devices for (Device device : devices) { Device currentDevice = new Device(); currentDevice.setDeviceName(device.getDeviceName()); currentDevice.setBatteryLevel(device.getBatteryLevel()); currentDevice.setIsCharging(device.isCharging()); mDevices.add(currentDevice); } mAdapter.notifyDataSetChanged(); } else { // Something went wrong Toast.makeText(getActivity(), "Error: " + e.toString(), Toast.LENGTH_LONG).show(); } } }); return mDevices; } @Override public void onClick(View v) { // Click events go here } public static DevicesCardViewFragment newInstance(List<Device> mDevices) { DevicesCardViewFragment fragment = new DevicesCardViewFragment(); Bundle args = new Bundle(); return fragment; } public interface OnFragmentInteractionListener { public void showAd(); } }
Mi recyclerViewAdapter tiene este aspecto:
- ¿Cómo desplazar horizontalmente RecyclerView de forma programática?
- Animación de RecyclerView en el clic de artículo
- Eliminar fila de RecyclerView
- ¿Número múltiple de columnas en un único StaggeredGridView?
- RecyclerView item layout_weight, tamaños no actualizados
package com.garciaericn.t2d.data; public class DeviceAdapter extends RecyclerView.Adapter<DeviceAdapter.MyViewHolder> { private final LayoutInflater inflater; List<Device> data = Collections.emptyList(); public DeviceAdapter(Context context, List<Device> data) { inflater = LayoutInflater.from(context); this.data = data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.card_layout, parent, false); MyViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Device device = data.get(position); holder.deviceNameTV.setText(device.getDeviceName()); holder.batteryLevelTV.setText(device.getBatteryLevel()); } @Override public int getItemCount() { return 0; } public static class MyViewHolder extends RecyclerView.ViewHolder { // Temp data set private String[] mDataset; TextView deviceNameTV; TextView batteryLevelTV; public MyViewHolder(View itemView) { super(itemView); deviceNameTV = (TextView) itemView.findViewById(R.id.device_name_tv); batteryLevelTV = (TextView) itemView.findViewById(R.id.battery_level_tv); } } }
- RecyclerView parpadea después de notifyDatasetChanged ()
- Cómo asignar una lista de lista a RecyclerView
- Recylerview no visible dentro de scrollview o nestedScrollview
- RecyclerView - elementos de pantalla que saltan el primer pase de diseño
- Recyclerview con fondo de desplazamiento
- Diseño cuadrado en GridLayoutManager para RecyclerView
- Android FlowLayout como RecyclerView LayoutManager
- Cómo crear una tarjeta CardView horizontal con RecyclerView con una sola tarjeta en la pantalla a la vez
Cambiar getItemCount()
para devolver realmente el valor correcto:
@Override public int getItemCount() { return data.size() }
- Cómo crear un cajón de navegación mediante Android Design Support Library?
- Doble toque -> Zoom en Android MapView?