0

How to handle empty data View in a RecyclerView ,I have tried so many ways from internet but none seems to work. I am also using realm database so I don't know if this is the right way to check if it is empty or not.

this is my Fragment xml where the RecyclerView is located

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_no_data"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_green_dark"
        android:gravity="center"
        android:text="emptty"
        android:textAppearance="?android:textAppearanceMedium"
        android:textColor="@android:color/white"
        android:visibility="invisible" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_favorite"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimaryDark">

    </android.support.v7.widget.RecyclerView>

</FrameLayout>

and this is my fragment class

public class FavouriteFragment extends Fragment {
RecyclerView mRecyclerView;
FavouriteAdapter adapter;
Realm mRealm;
int positions;
TextView emptyText;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.favourite_fragment,container,false);
    mRealm=Realm.getDefaultInstance();
    RealmQuery<news> quotesRealmQuery = mRealm.where(News.class).equalTo("favourite",true);
    RealmResults<News> mResults = newsRealmQuery.findAll();

    emptyText= (TextView) view.findViewById(R.id.tv_no_data);

    //adapter=new FavouriteAdapter(getActivity(),mResults,mRealm);
    mRecyclerView= (RecyclerView) view.findViewById(R.id.rv_favorite);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    if (!mResults.isEmpty()) {
        //if data is available, don't show the empty text
        emptyText.setVisibility(View.INVISIBLE);
        adapter=new FavouriteAdapter(getActivity(),mResults,mRealm,pos,single);
        mRecyclerView.setAdapter(adapter);
        mRealm.addChangeListener(new RealmChangeListener<Realm>() {
            @Override
            public void onChange(Realm element) {
                adapter.notifyItemRemoved(positions);
            }
        });

    } else
        emptyText.setVisibility(View.VISIBLE);




    return view;

}
HenriqueMS
  • 3,864
  • 2
  • 30
  • 39
Ahmed Ezzat
  • 397
  • 1
  • 5
  • 21

1 Answers1

3

Your RecyclerView is not transparent so you should remember to hide it when is empty:

  if (!mResults.isEmpty()) {
            //if data is available, don't show the empty text

            emptyText.setVisibility(View.INVISIBLE);
            mRecyclerView.setVisibility(View.VISIBLE);

        } else { 
            emptyText.setVisibility(View.VISIBLE);
            mRecyclerView.setVisibility(View.GONE);
        }
wdeb
  • 61
  • 1
  • 4