java - 如何将 RecyclerView 放入 Fragment?
问题描述
对于android开发,我还是新手。目前,我正在尝试在片段中显示 RecyclerView。我试图在不使用 Fragment 的情况下显示 RecyclerView 并且效果很好。但是在使用 Fragment 时,什么都没有显示。
这是MainActivity
包含片段:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ButterKnife.bind(this);
BottomNavigationView navView = findViewById(R.id.nav_view);
navView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
mViewModel = ViewModelProviders.of(this).get(MainActivityViewModel.class);
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.add(R.id.fragment_container, missionListFragment).addToBackStack(null).commit();
}
和片段的onCreateView
方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_mission_list, container, false);
//ButterKnife.bind(rootview);
mRecycler = (RecyclerView) rootView.findViewById(R.id.recycler);
mFirestore = FirebaseFirestore.getInstance();
mQuery = mFirestore.collection("COLLECTION_NAME").limit(LIMIT);
if (mQuery == null) {
Log.w(TAG, "No query, not initializing RecyclerView. Created data on server.");
}
mAdapter = new RecyclerViewAdapter(mQuery, this) {
@Override
protected void onDataChanged() {
}
@Override
protected void onError(FirebaseFirestoreException e) {
// Show a snackbar on errors
Snackbar.make(getActivity().findViewById(android.R.id.content),
"Error: check logs for info.", Snackbar.LENGTH_LONG).show();
}
};
mRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecycler.setAdapter(mAdapter);
return rootView;
}
与RecyclerViewAdapter
:
public class RecyclerViewAdapter extends FirestoreAdapter<RecyclerViewAdapter.ViewHolder> {
private static final int UNAVAILABLE = 0, AVAILABLE = 1;
public interface OnItemSelectedListener {
void onItemSelected(DocumentSnapshot item);
}
private OnItemSelectedListener mListener;
public RecyclerViewAdapter(Query query, OnItemSelectedListener listener) {
super(query);
mListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
return new ViewHolder(inflater.inflate(R.layout.item, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(getSnapshot(position), mListener);
}
static class ViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.view1)
TextView view1;
@BindView(R.id.view2)
TextView view2;
@BindView(R.id.view3)
TextView view3;
@BindView(R.id.view4)
TextView view4;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bind(final DocumentSnapshot snapshot,
final OnItemSelectedListener listener) {
Item item = snapshot.toObject(Item.class);
Resources resources = itemView.getResources();
view1.setText(item.getfield1());
view2.setText(Integer.toString(item.getfield2()));
if(item.getfield3() == AVAILABLE)
view3.setText("Available");
else
view3.setText("Unavailable");
view4.setText(item.getfield4().toString());
// Click listener
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null) {
listener.onItemSelected(snapshot);
}
}
});
}
}
}
正如您在上面看到的,我从 Firebase 获取数据并将它们显示为 RecyclerView。但我认为不是查询数据为空的问题,请大家帮忙。
解决方案
可能是未检索到来自 firebase 的数据,因此没有内容供 recyclerview 显示。请检查您的 firebase 连接是否工作正常,并且您正在从中检索某些内容
推荐阅读
- chatbase - 尝试使用 restTemplate 发布到聊天库时为 500
- r - 在 R 中导入和清理文本文件
- c# - 如何在c#中将十六进制从char []转换为int
- java - 清单中的错误 parentActivityName
- c# - 是否可以(以编程方式)证明两个 LINQ 查询相等?
- active-directory - Active Directory:是否可以设置无效的用户帐户控制值?
- c# - 从主窗口更新第二个窗口中的列表
- javascript - Rails - 呈现新的部分时强制窗口滚动位置到顶部
- c# - 具有多个 api 和查询字符串的 mvc.net 核心 Web 应用程序中的 httpclient 重用
- mysql - 尝试在 Windows 10 机器上配置节点和 mysql 数据库