Я хотел бы показать представление, в котором нет данных, вместо пустого recyclerView. Это мой адаптер RecyclerView
public class SurveyAdapter extends RecyclerView.Adapter<SurveyAdapter.ViewHolderSurvey> {
private ArrayList<Evaluator> mSurveyList;
private View v;
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
public static class ViewHolderSurvey extends RecyclerView.ViewHolder {
public ImageView surveyIcon;
public TextView surveyTitle, surveyDesc, surveyStartDate, surveyEndDate, surveyAnonymous;
public Button answerButton;
public ViewHolderSurvey(@NonNull View itemView, final OnItemClickListener listener) {
super(itemView);
surveyIcon = itemView.findViewById(R.id.survey_anonymous_icon);
surveyAnonymous = itemView.findViewById(R.id.survey_anonymous);
surveyTitle = itemView.findViewById(R.id.survey_title);
surveyDesc = itemView.findViewById(R.id.survey_desc);
surveyStartDate = itemView.findViewById(R.id.survey_start_date_date);
surveyEndDate = itemView.findViewById(R.id.survey_end_date_date);
answerButton = itemView.findViewById(R.id.answer_btn_survey);
answerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(position);
}
}
}
});
}
}
public SurveyAdapter(ArrayList<Evaluator> surveyList) {
mSurveyList = surveyList;
}
@NonNull
@Override
public SurveyAdapter.ViewHolderSurvey onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_survey_item, parent, false);
return new ViewHolderSurvey(v, mListener);
}
@Override
public void onBindViewHolder(@NonNull SurveyAdapter.ViewHolderSurvey holder, int position) {
Evaluator currentItem = mSurveyList.get(position);
if (!mSurveyList.isEmpty()) {
Evaluation eval = currentItem.getEvaluation();
Survey survey = eval.getSurvey();
holder.surveyTitle.setText(survey.getName());
holder.surveyDesc.setText(Html.fromHtml(survey.getDescription(), Html.FROM_HTML_MODE_COMPACT));
holder.surveyStartDate.setText(eval.getInitDate());
holder.surveyEndDate.setText(eval.getEndDate());
if (survey.getAnonymous() == 0) {
holder.surveyIcon.setImageResource(R.drawable.ic_x);
holder.surveyAnonymous.setTextColor(ContextCompat.getColor(v.getContext(), R.color.red));
} else {
holder.surveyIcon.setImageResource(R.drawable.ic_check);
holder.surveyAnonymous.setTextColor(ContextCompat.getColor(v.getContext(), R.color.green));
}
}
}
@Override
public int getItemCount() {
return mSurveyList.size();
}
}
Какой здесь лучший подход, отдельный класс ViewHolder или динамическое отображение макета. Что я могу сделать, чтобы получить это, так это работа. Прямо сейчас у меня есть LinearLayout
под recyclerView, но я не уверен, как отобразить его поверх recyclerView.
Как лучше всего это сделать?
Изменить это это то, что я пробовал, в моем макете фрагментов я добавил Linear Layout с textView, в котором нет данных и значок. Это то, что я делаю во фрагменте
private LinearLayout mEmptySurveys;
private RecyclerView mRecyclerView;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mRecyclerView = view.findViewById(R.id.reclycer_view_surveys);
mRecyclerView.setHasFixedSize(true);
mEmptySurveys = view.findViewById(R.id.survey_no_data);
mEmptySurveys.setVisibility(View.GONE);
swipeRefreshLayout = view.findViewById(R.id.swiperefresh_surveys);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (Connectivity.hasConnectivity(activity, true)) {
reloadSurveys();
} else {
//toast
}
}
});
if (Connectivity.hasConnectivity(activity, true)) {
getSurveys();
} else {
//toast
}
return view;
private void reloadSurveys() {
surveys.clear();
getSurveys();
swipeRefreshLayout.setRefreshing(false);
}
private void getSurveys() {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
AlertDialog dialog = builder.create();
dialog.show();
Call<List<Evaluator>> call = apiInterface.getSurveys();
call.enqueue(new Callback<List<Evaluator>>() {
@Override
public void onResponse(Call<List<Evaluator>> call, Response<List<Evaluator>> response) {
if (!response.isSuccessful()) {
//toast
}
List<Evaluator> masterItem = response.body();
masterItem.forEach(evaluator -> {
if (!evaluator.getAnswered()) {
surveys.add(new Evaluator(evaluator.getId(), evaluator.getAnswered(), evaluator.getEvaluation()));
}
});
mAdapter = new SurveyAdapter(surveys);
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(//stuff in here)
if (surveys.isEmpty()) {
mRecyclerView.setVisibility(View.GONE);
mEmptySurveys.setVisibility(View.VISIBLE);
} else {
mRecyclerView.setVisibility(View.VISIBLE);
mEmptySurveys.setVisibility(View.GONE);
}
dialog.dismiss();
}
@Override
public void onFailure(Call<List<Evaluator>> call, Throwable t) {
//toast
dialog.dismiss();
}
});
Это отлично работает, когда surveys
пуст, но когда я перезагружаюсь и есть данные, recyclerView пуст, полностью пуст. Как я могу это исправить?