New to Android, I used the code from
https://github.com/tutsplus/Android-CardViewRecyclerView
which is working perfectly.
But when I created Fragment out of it, it is displaying nothing.
CardViewFrag.java
package com.androidatc.customviewindrawer;
import android.app.Activity;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class CardViewFrag extends Fragment {
TextView personName;
TextView personAge;
ImageView personPhoto;
protected void onCreateView(Bundle savedInstanceState) {
getActivity().setContentView(R.layout.cardview_activity);
personName = (TextView)getActivity().findViewById(R.id.person_name);
personAge = (TextView)getActivity().findViewById(R.id.person_age);
personPhoto = (ImageView)getActivity().findViewById(R.id.person_photo);
personName.setText("Emma Wilson");
personAge.setText("23 years old");
personPhoto.setImageResource(R.drawable.emma);
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
}
RecyclerViewFrag.java
package com.androidatc.customviewindrawer;
import android.app.Activity;
import android.app.Fragment;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class RecyclerViewFrag extends Fragment {
public List<Person> persons;
public RecyclerView rv;
public void onCreateView(Bundle savedInstanceState) {
getActivity().setContentView(R.layout.recyclerview_activity);
rv=(RecyclerView)getActivity().findViewById(R.id.rv);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
rv.setHasFixedSize(true);
initializeData();
initializeAdapter();
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
public void initializeData(){
persons = new ArrayList<>();
persons.add(new Person("Emma Wilson", "23 years old", R.drawable.emma));
persons.add(new Person("Lavery Maiss", "25 years old", R.drawable.lavery));
persons.add(new Person("Lillie Watts", "35 years old", R.drawable.lillie));
}
public void initializeAdapter(){
RVAdapter adapter = new RVAdapter(persons);
rv.setAdapter(adapter);
}
}
RVAdapter.java
package com.androidatc.customviewindrawer;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
public static class PersonViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView personName;
TextView personAge;
ImageView personPhoto;
PersonViewHolder(View itemView) {
super(itemView);
cv = (CardView)itemView.findViewById(R.id.cv);
personName = (TextView)itemView.findViewById(R.id.person_name);
personAge = (TextView)itemView.findViewById(R.id.person_age);
personPhoto = (ImageView)itemView.findViewById(R.id.person_photo);
}
}
List<Person> persons;
RVAdapter(List<Person> persons){
this.persons = persons;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
PersonViewHolder pvh = new PersonViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
personViewHolder.personName.setText(persons.get(i).name);
personViewHolder.personAge.setText(persons.get(i).age);
personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
}
@Override
public int getItemCount() {
return persons.size();
}
}
I am calling this from Navigation drawer.
private void loadFragmentLayout(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new CardViewFrag();
break;
case 1:
fragment = new BarCodeFrag();
break;
case 2:
fragment = new SearchBookFrag();
break;
case 3:
fragment = new LoginFrag();
break;
case 4:
fragment = new MyAccFrag();
break;
default:
break;
}
My MainActivity file is quite big, but every time I add a fragment, I just mention that it implements OnFragmentInteractionListener. If my Activity is working for all fragments except this one, there should not be any reason - why it is not working for this Frag.
RecyclerViewFrag.OnFragmentInteractionListener,
CardViewFrag.OnFragmentInteractionListener
public class MainActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks,
SearchCatFragment.OnFragmentInteractionListener,
// AndroidBarcodeQrExample.OnFragmentInteractionListener,
BarCodeFrag.OnFragmentInteractionListener,
LoginFrag.OnFragmentInteractionListener,
HomeFrag.OnFragmentInteractionListener,
MainViewFragment.OnFragmentInteractionListener,
SearchBookFrag.OnFragmentInteractionListener,
SearchBookFragment.OnFragmentInteractionListener,
MyAccFrag.OnFragmentInteractionListener,
RecyclerViewFrag.OnFragmentInteractionListener,
CardViewFrag.OnFragmentInteractionListener
Any idea - why in Fragment no display?
cardview_activity and recyclerview_activity remain the views without any changes.
cardview_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="16dp"
>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cv"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/person_photo"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="16dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/person_name"
android:layout_toRightOf="@+id/person_photo"
android:layout_alignParentTop="true"
android:textSize="30sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/person_age"
android:layout_toRightOf="@+id/person_photo"
android:layout_below="@+id/person_name"
/>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
recyclerview_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:padding="16dp"
>
<android.support.v7.widget.RecyclerView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/rv"
>
</android.support.v7.widget.RecyclerView>
</LinearLayout>
This question may be asked a couple of times but none of the solution helped me.
Many thanks.
See Question&Answers more detail:
os