Имейте один TextView в вашем xml. Присвойте ему хорошее имя, скажем, tv_noContent.
Поместите одно условие в ваш код перед обновлением адаптера.
if(cgpaArrayList.isEmpty()){
recyclerview.setVisibility(View.Gone);
tv_noContent.setVisibility(View.Visible)
tv_noContent.setText("Its empty here");
}else{
tv_noContent.setVisibility(View.Gone);
recyclerview.setVisibility(View.Visible);
//Update your adapter here
}
Также я бы порекомендовал вам использовать верблюжий чехол при именовании вашего класса. Конечно, cgpa_frag это имя для класса Fragment производит запах кода. Скорее назовите это CgpaFragment. Который более читабелен и имеет смысл. Также не создавайте другой экземпляр вашего адаптера. Вместо этого используйте метод в вашем адаптере.
public void updateRecyclerList(ArrayList cgpaArrayList){
this.cgpaArrayList.clear();
this.cgpaArrayList.addAll(cgpaArrayList);
notifyDatasetChange();
}
Ваш адаптер представления переработчика позаботится о вашем обновленном списке. Вы создаете дополнительные издержки с новым объектом адаптера. Он будет создаваться каждый раз, когда вы хотите показать новые данные. Наличие метода в вашем адаптере только обновит ваш список sh. И не будет создавать новый пользовательский интерфейс. Надеюсь, что это поможет вам. Счастливое кодирование