当我(使用Google邮件)登录时,LoginFragment
被包含DrinkCategoryFragment
的{{1}}取代。
可以从Firebase数据库正确获取项目,但是布局不存在,我不知道为什么。
RecyclerView
在RecyclerView
内部初始化:
DrinkCategoriesViewMvcImpl.java
这是适配器类:
public class DrinkCategoriesViewMvcImpl implements DrinkCategoriesViewMvc {
private View rootView;
private RecyclerView recyclerView;
private FloatingActionButton shareButton;
private DrinkCategoriesAdapter adapter;
public DrinkCategoriesViewMvcImpl(LayoutInflater inflater, ViewGroup parent) {
initializeViews(inflater, parent);
}
@Override
public View getRootView() {
return rootView;
}
@Override
public void setOnDrinkCategoryClickListener(OnDrinkCategoryClickListener listener) {
}
@Override
public void bindDrinkCategories(List<DrinkCategory> drinkCategories) {
adapter.addDrinkCategories(drinkCategories);
adapter.notifyDataSetChanged();
}
private void initializeViews(LayoutInflater inflater, ViewGroup parent) {
rootView = inflater.inflate(R.layout.activity_main_list, parent, false);
shareButton = rootView.findViewById(R.id.fab_share);
setupRecyclerView();
}
private void setupRecyclerView() {
recyclerView = rootView.findViewById(R.id.recyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(rootView.getContext(),LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
adapter = new DrinkCategoriesAdapter(rootView.getContext());
recyclerView.setAdapter(adapter);
}
还有布局文件:
public class DrinkCategoriesAdapter extends RecyclerView.Adapter<DrinkCategoriesAdapter.CategoryItemHolder> {
private Context context;
private List<DrinkCategory> drinkCategories;
public DrinkCategoriesAdapter(Context context) {
this.context = context;
}
public void addDrinkCategories(List<DrinkCategory> drinkCategories) {
this.drinkCategories = drinkCategories;
}
@NonNull
@Override
public CategoryItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.activity_main_list_item, parent, false);
return new CategoryItemHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull CategoryItemHolder holder, int position) {
if (drinkCategories != null && drinkCategories.size() > 0) {
holder.bindViews(drinkCategories.get(position));
}
}
@Override
public int getItemCount() {
if (drinkCategories != null) {
return drinkCategories.size();
}
return 0;
}
class CategoryItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView title, subtitle;
private ImageView_3_2 poster;
public CategoryItemHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
title = itemView.findViewById(R.id.textview_title);
subtitle = itemView.findViewById(R.id.textview_subtitle);
poster = itemView.findViewById(R.id.imageview_background);
}
@Override
public void onClick(View v) {
}
public void bindViews(DrinkCategory drinkCategory) {
title.setText(drinkCategory.getTitle());
// TODO: subtitle will be set from sharedpreferences
}
}
}
为什么会这样? (project on Github)
答案 0 :(得分:2)
您需要检查您的 DrinkCategoryFragment 类。
由于您没有返回要放大的视图
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
viewMvc = new DrinkCategoriesViewMvcImpl(inflater, container);
// Not return the view you want to inflate
return super.onCreateView(inflater, container, savedInstanceState);
}
尝试它对您有用
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
viewMvc = new DrinkCategoriesViewMvcImpl(inflater, container);
return viewMvc.getRootView();
}