0

Я использую адаптер адаптера для отображения text_view.xml в fragment_list.xml. Однако, когда я настраиваю свой fragment_list.xml, добавляя RelativeLayout, text_view больше не отображается. Я получаю сообщение об ошибке: E/RecyclerView: No adapter attached; skipping layoutИспользование адаптера RecyclerView - ошибка E/RecyclerView: адаптер не подключен; пропуская макет

Это my_text_view.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textSize="18sp" 
android:textStyle="normal|bold" 
android:textColor="@color/black" 
android:textAlignment="center" 
android:text="This is my @string/cast_intro_overlay_button_text"> 
</TextView> 

Мои fragment_item_list.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/background_color"> 

<Button 
    android:text="Back" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/buttonBack" 
    android:layout_weight="0.08" 
    android:textSize="24sp" 
    style="@style/Widget.AppCompat.Button.Colored" 
    android:layout_marginBottom="14dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="30sp" 
    android:textColor="@color/black" 
    android:textAlignment="center" 
    android:id="@+id/myTextView" 
    android:text="Best Scores" 
    android:textStyle="normal|bold" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="19dp"> 
</TextView> 

<android.support.v7.widget.RecyclerView android:id="@+id/list" 
    android:name="com.example.lucadigiammarino.biogame.ItemFragment" 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    app:layoutManager="LinearLayoutManager" 
    tools:context="com.example.lucadigiammarino.biogame.ItemFragment" 
    tools:listitem="@layout/my_text_view" 
    android:isScrollContainer="false" 
    android:addStatesFromChildren="true" 
    android:layout_below="@+id/myTextView" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="37dp"> 
    </android.support.v7.widget.RecyclerView> 
</RelativeLayout> 

Это мой MyPlayerAdapter class

class MyPlayerAdapter extends RecyclerView.Adapter{ 
ArrayList<Player> players; 

/** 
* Constructor for MyPlayerAdapter class 
* @param players 
*/ 
public MyPlayerAdapter(ArrayList<Player> players) { 
    this.players = players; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false); 
    MyViewHolder vh = new MyViewHolder((TextView) v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    MyViewHolder vh = (MyViewHolder)holder; 
    vh.mTextView.setText(players.get(position).name+", "+players.get(position).score); 
} 

@Override 
public int getItemCount() { 
    return players.size(); 
} 

public static class MyViewHolder extends RecyclerView.ViewHolder{ 
    public TextView mTextView; 
    public MyViewHolder(TextView v) { 
     super(v); 
     mTextView = v; 
    } 
} 


} 

И это мой OnCreateView() моего FragmentItem class

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_item_list, container, false); 

    // Set the adapter 
    if (view instanceof RecyclerView) { 
     Context context = view.getContext(); 
     RecyclerView recyclerView = (RecyclerView) view; 
     if (mColumnCount <= 1) { 
      recyclerView.setLayoutManager(new LinearLayoutManager(context)); 
     } else { 
      recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); 
     } 
     recyclerView.setAdapter(new MyPlayerAdapter(Score.getInstance().getPlayers())); 
    } 

    return view; 
} 

Я действительно не знаю, где больше кладу руки. Цените помощи ребятам.

Спасибо заранее

+0

где код вашего вида деятельности? –

+0

@Divyesh Я просто создаю фрагмент внутри своей деятельности, ничего не делая. Затем из моего фрагмента метод, касающийся адаптера, является «OnCreateView()», и он был присоединен. – LDG

+0

Я имею в виду, где вы определяете свой recyclerview и фрагмент, где вы заполняете некоторые данные и устанавливаете свой адаптер. –

ответ

1

Это потому, что ваш объект зрения не InstanceOf RecyclerView, но экземпляр RelativeLayout. Таким образом, код внутри вашего оператора if никогда не выполняется. Заменить код с этим:

View view = inflater.inflate(R.layout.fragment_item_list, container, false); 
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.list); 
    Context context = view.getContext(); 
    if (mColumnCount <= 1) { 
    recyclerView.setLayoutManager(new LinearLayoutManager(context)); 
    } else { 
    recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); 
    } 
    recyclerView.setAdapter(new MyPlayerAdapter(Score.getInstance().getPlayers())); 

Здесь вы получите свой экземпляр recyclerView из макета вы завышены в случае представления.

+0

Да, какой идиот! Спасибо за помощь! – LDG

+0

Случается для всех нас :) – hkop