I changed my activity to fragment for some reason but now my recycler view is not shown I have also checked the ArrayList that I want to show on recycler view it was not empty. The same code is working in another activity and fragments but not in this fragment. Please someone help me out!! Thank you in advance
my fragment code
public class HomeSkillsFragment extends Fragment {
private EditText Search;
private ImageView back;
private RecyclerView recyclerView;
private ArrayList<Post> postItem;
private postAdapter adapter;
private GridLayoutManager gridLayoutManager;
private DatabaseReference reference;
private BottomNavigationVisibility bottomNavigationVisibility;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home_skills, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
bottomNavigationVisibility = new BottomNavigationVisibility(getActivity());
bottomNavigationVisibility.hideBottomNavigation();
//init Views
Search = getActivity().findViewById(R.id.search_editText);
back = getActivity().findViewById(R.id.back);
recyclerView = getActivity().findViewById(R.id.recyclerView);
gridLayoutManager = new GridLayoutManager(getContext(),2,GridLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(gridLayoutManager);
//getting Data from Database
getDataFromDB();
//click handle, back
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bottomNavigationVisibility.showBottomNavigation();
NavController navController = Navigation.findNavController(getActivity(), R.id.nav_host_fragment);
navController.navigate(R.id.navigation_home);
}
});
}
private void getDataFromDB(){
postItem = new ArrayList<>();
//initialize database
reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot dataSnapshot: snapshot.getChildren()){
Post post = dataSnapshot.getValue(Post.class);
if(post.getCategory().equals("Skills, M" ) || post.getCategory().equals("Skills, S"))
postItem.add(post);
}
adapter = new postAdapter(getContext(),postItem);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getContext(),"Something went Wrong",Toast.LENGTH_SHORT).show();
}
});
}
}
my adapter code
public class postAdapter extends RecyclerView.Adapter<postAdapter.PostViewHolder> {
LayoutInflater mInflater;
private ArrayList<Post> mPost;
Context context;
public postAdapter(Context context, ArrayList<Post> posts) {
mInflater = LayoutInflater.from(context);
this.mPost = posts;
this.context=context;
}
@NonNull
@Override
public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = mInflater.inflate(R.layout.list_item,parent,false);
return new PostViewHolder(itemView,this);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onBindViewHolder(@NonNull PostViewHolder holder, int position) {
//setting post title
Post currentPost = mPost.get(position);
holder.itemNameTextView.setText(currentPost.getPost_Title());
//setting InExchange
if(currentPost.getCategory().equals("Skills, M") || currentPost.getCategory().equals("Educational Accessories, M")){
holder.inExchangeTextView.setText("Rs. " currentPost.getIn_Exchange());
holder.inExchangeTextView.setTextColor(context.getColor(R.color.blue));
holder.exchangeIcon.setVisibility(View.VISIBLE);
}
else if(currentPost.getCategory().equals("Skills, S") || currentPost.getCategory().equals("Educational Accessories, A")){
holder.inExchangeTextView.setText(currentPost.getIn_Exchange());
holder.inExchangeTextView.setTextColor(context.getColor(R.color.blue));
holder.exchangeIcon.setVisibility(View.VISIBLE);
}
else{
holder.inExchangeTextView.setText(currentPost.getIn_Exchange());
holder.inExchangeTextView.setTextColor(context.getColor(R.color.green));
holder.exchangeIcon.setVisibility(View.INVISIBLE);
}
//setting image
Picasso.get().load(currentPost.getImage_Url_1()).into(holder.image);
holder.image.setClipToOutline(true);
//setting institution name
FirebaseDatabase.getInstance().getReference("Users/" currentPost.getUid() "/").getRef().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
holder.institutionName.setText(snapshot.child("institution").getValue(String.class));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(context,"Something went wrong",Toast.LENGTH_SHORT).show();
}
});
//handle click of item
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putSerializable("currentPost", currentPost);
Navigation.findNavController(view).navigate(R.id.action_navigation_home_to_homeDetailFragment, bundle);
}
});
}
@Override
public int getItemCount() {
return mPost.size();
}
class PostViewHolder extends RecyclerView.ViewHolder{
TextView itemNameTextView;
TextView inExchangeTextView ;
TextView institutionName;
ImageView image, exchangeIcon ;
RecyclerView.Adapter mAdapter;
public PostViewHolder(@NonNull View itemView, postAdapter adapter) {
super(itemView);
itemNameTextView = itemView.findViewById(R.id.itemName_TextView);
inExchangeTextView = itemView.findViewById(R.id.inExchange_TextView);
image = itemView.findViewById(R.id.imageView);
institutionName = itemView.findViewById(R.id.institutionName);
exchangeIcon = itemView.findViewById(R.id.exchange_icon);
mAdapter = adapter;
}
}
}
my Xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragments.home.HomeSkillsFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@ id/constraintLayoutTop"
android:layout_width="match_parent"
android:layout_height="@dimen/_130sdp"
android:background="@drawable/top_background_rounded"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@ id/back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_10sdp"
android:layout_marginStart="@dimen/_12sdp"
android:foreground="?android:attr/selectableItemBackgroundBorderless"
android:src="@drawable/arrow_back"
android:padding="@dimen/_8sdp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@ id/search_editText"
style="@style/searchView"
android:layout_width="0dp"
android:layout_height="@dimen/_35sdp"
android:layout_marginStart="@dimen/_10sdp"
android:layout_marginTop="@dimen/_8sdp"
android:inputType="text"
android:includeFontPadding="false"
android:singleLine="true"
android:layout_marginEnd="@dimen/_16sdp"
android:layout_marginBottom="@dimen/main_start_end_margin"
android:hint="Search"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/back"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@ id/skills_imageView"
android:layout_width="@dimen/_50sdp"
android:layout_height="@dimen/_50sdp"
android:background="@drawable/searchview_bg"
android:src="@drawable/ic_skills"
android:scaleType="centerInside"
android:layout_marginTop="@dimen/_8sdp"
app:layout_constraintTop_toBottomOf="@id/search_editText"
app:layout_constraintEnd_toEndOf="@ id/constraintLayoutTop"
app:layout_constraintStart_toStartOf="@ id/constraintLayoutTop" />
<TextView
android:id="@ id/skills_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_4sdp"
android:fontFamily="@font/poppins_regular"
android:text="Skills"
android:textColor="@android:color/black"
android:textSize="@dimen/_12ssp"
android:includeFontPadding="false"
app:layout_constraintTop_toBottomOf="@id/skills_imageView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@ id/inExchange_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="In Exchange"
android:textSize="@dimen/_10ssp"
android:textColor="@color/black"
android:fontFamily="@font/poppins_medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/constraintLayoutTop"
android:layout_marginTop="@dimen/_8sdp" />
<RadioGroup
android:id="@ id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="@dimen/_20sdp"
app:layout_constraintTop_toBottomOf="@id/inExchange_TextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:orientation="horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="See All"
android:scaleX="0.9"
android:scaleY="0.9"
android:textStyle="bold"
style="@style/radioButton"
android:fontFamily="@font/poppins_medium"
android:includeFontPadding="false"
android:id="@ id/radioButtonAll"
android:checked="true"
android:textSize="@dimen/_10sdp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Give Money"
style="@style/radioButton"
android:scaleX="0.9"
android:scaleY="0.9"
android:textStyle="bold"
android:includeFontPadding="false"
android:fontFamily="@font/poppins_medium"
android:id="@ id/radioButtonMoney"
android:checked="false"
android:textSize="@dimen/_10sdp" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:scaleX="0.9"
android:scaleY="0.9"
android:text="Teach Other Skill"
style="@style/radioButton"
android:textStyle="bold"
android:fontFamily="@font/poppins_medium"
android:id="@ id/radioButtonSkill"
android:checked="false"
android:textSize="@dimen/_10sdp" />
</RadioGroup>
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/_10sdp"
android:paddingLeft="@dimen/_12sdp"
android:paddingRight="@dimen/_12sdp"
android:paddingTop="@dimen/_8sdp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/radioGroup"
app:layout_constraintVertical_weight="1" />
</androidx.constraintlayout.widget.ConstraintLayout>
CodePudding user response:
In your code, you will try to get views from an activity, but not from a Fragment.
Search = getActivity().findViewById(R.id.search_editText);
back = getActivity().findViewById(R.id.back);
recyclerView = getActivity().findViewById(R.id.recyclerView);
And instead of onActivityCreated use onViewCreated
Updated HomeSkillFragment.class.
public class HomeSkillsFragment extends Fragment {
private EditText Search;
private ImageView back;
private RecyclerView recyclerView;
private ArrayList<Post> postItem;
private postAdapter adapter;
private GridLayoutManager gridLayoutManager;
private DatabaseReference reference;
private BottomNavigationVisibility bottomNavigationVisibility;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home_skills, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
bottomNavigationVisibility = new BottomNavigationVisibility(getActivity());
bottomNavigationVisibility.hideBottomNavigation();
//init Views
Search = view.findViewById(R.id.search_editText);
back = view.findViewById(R.id.back);
recyclerView = view.findViewById(R.id.recyclerView);
gridLayoutManager = new GridLayoutManager(getContext(), 2, GridLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(gridLayoutManager);
//getting Data from Database
getDataFromDB();
//click handle, back
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bottomNavigationVisibility.showBottomNavigation();
NavController navController = Navigation.findNavController(getActivity(), R.id.nav_host_fragment);
navController.navigate(R.id.navigation_home);
}
});
}
private void getDataFromDB() {
postItem = new ArrayList<>();
//initialize database
reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
Post post = dataSnapshot.getValue(Post.class);
if (post.getCategory().equals("Skills, M") || post.getCategory().equals("Skills, S"))
postItem.add(post);
}
adapter = new postAdapter(getContext(), postItem);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(getContext(), "Something went Wrong", Toast.LENGTH_SHORT).show();
}
});
}
}