2016-02-03 6 views
-4

Новое в Android, я использовал код от https://github.com/tutsplus/Android-CardViewRecyclerView , который отлично работает.RecyclerView не отображается в Фрагменте

Но когда я создал Фрагмент, он ничего не отображает.

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(); 
    } 
} 

Я звоню это из панели навигации.

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; 
     } 

Мой файл MainActivity довольно большой, но каждый раз, когда я добавить фрагмент, я просто упомянуть, что он реализует OnFragmentInteractionListener. Если моя активность работает для всех фрагментов, кроме этой, не должно быть никаких причин - почему она не работает для этого 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 

Любая идея - почему в фрагменте нет дисплея?

cardview_activity и recyclerview_activity остаются без изменений.

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> 

Этот вопрос можно задать пару раз, но ни один из раствора не помог мне.

Большое спасибо.

+1

Опубликовать Деятельность, в которой вы прикреплены Фрагмент. – Shvet

+0

Я добавил код, дайте мне знать, если вам нужно больше. – Dep

+0

Могу ли я узнать, почему мой вопрос получил отрицательную маркировку? Если это действительно так, это поможет мне улучшить в следующий раз. – Dep

ответ

1

Вы не переопределите методы, необходимые для фрагмента. Сначала вы должны найти некоторые уроки по фрагменту, а используя защищенный метод onCreateView, вы должны переопределить его общедоступный метод.

public class RecyclerViewFrag extends Fragment { 

    private List<Person> persons; 
    private RecyclerView rv; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.recyclerview_activity, container, false); 
    } 
    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 

     rv=(RecyclerView)view.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); 
    } 

    private 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)); 
    } 

    private void initializeAdapter(){ 
     RVAdapter adapter = new RVAdapter(persons); 
     rv.setAdapter(adapter); 
} 
} 
+0

Спасибо за выделение. Исправлено для публики, но пока не отображается. – Dep

+0

@ Dep, я думаю, вы не поняли его правильно. Я сказал, чтобы переопределить методы. не исправлять их – Shvet

+0

Швет, я сделал то же самое. Все необходимые методы переопределяются. public View onCreateView добавлен. Также, я думаю, он покажет ошибку, если не переопределит? – Dep