【发布时间】:2017-07-11 08:58:14
【问题描述】:
我在片段中创建FragmentViewPost,它显示错误。但是,如果我不在 Fragment 项目中构建ViewPost,它就可以工作。我不知道是什么问题导致 Fragment 出错
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.View android.support.v7.widget.RecyclerView.findViewById(int)”
这是我的代码:
public class FragmentViewPost extends Fragment {
public static FragmentViewPost newInstance() {
FragmentViewPost fragment = new FragmentViewPost();
return fragment;
}
public FragmentViewPost() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_fragment_view_post, container, false);
}
private RecyclerView mBlogList;
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser() == null){
startActivity();
}
}
};
mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog");
mBlogList = (RecyclerView) mBlogList.findViewById(R.id.blog_list_fragment); <<< Problem
mBlogList.setHasFixedSize(true);
mBlogList.setLayoutManager(new LinearLayoutManager(getContext()));
}
private void startActivity() {
Intent loginIntent = new Intent(getActivity(),PageLogin.class);
loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);
}
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
Blog.class,
R.layout.blog_row,
BlogViewHolder.class,
mDatabase
) {
@Override
protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {
viewHolder.setTitle(model.getTitle());
viewHolder.setDesc(model.getDesc());
viewHolder.setImage(getApplicationContext(), model.getImage());
}
};
mBlogList.setAdapter(firebaseRecyclerAdapter);
}
public static class BlogViewHolder extends RecyclerView.ViewHolder{
View mView;
public BlogViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setTitle(String title){
TextView post_title = (TextView) mView.findViewById(R.id.post_title);
post_title.setText(title);
}
public void setDesc(String desc){
TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
post_desc.setText(desc);
}
public void setImage(Context ctx, String image){
ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
Picasso.with(ctx).load(image).into(post_image);
}
}
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.menu_post, menu);
// return super.onCreateOptionsMenu(menu);
// }
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_post, menu);
super.onCreateOptionsMenu(menu,inflater);
}
}
详细错误:
mBlogList = (RecyclerView) mBlogList.findViewById(R.id.blog_list_fragment);
【问题讨论】:
-
mBlogList = (RecyclerView) mBlogList.findViewById(R.id.blog_list_fragment);
-
错误行 mBlogList @StefanSprenger
-
您使用 mBlogList 实例化 mBlogList。应该是:mBlogList = (RecyclerView) view.findViewById(R.id.blog_list_fragment);
-
不是错误,而是 viewHolder.setImage(getApplicationContext(), model.getImage());错误方法 populateViewHolder @StefanSpreger
标签: android android-fragments firebase firebase-authentication