5

У меня есть пользовательский фрагмент, который привязан к моей MainActivity. Файл макета фрагмента содержит виджет recyclerview.parent.getContext в RecyclerView.Adapter onCreateViewHolder метод

fragment_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical"/> 

</FrameLayout> 

В моей RecyclerView.Adapter метод onCreateViewHolder выглядит следующим образом:

@Override 
public MyAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout 
      .list_item, parent, false); 
    return new MyHolder(view); 
} 

Мой вопрос о родителю ViewGroup от этого метода. Эта ViewGroup - мой виджет RecyclerView, но почему дает мне parent.getContext ссылку на мою MainActivity, а не на мой фрагмент?

ответ

11

Фрагменты на самом деле не имеют контекста. При работе с фрагментом и вам нужен контекст, обычно вам нужно позвонить getActivity(). В этом конкретном случае контекст передается от операции к фрагменту в RecyclerView - помните, что представление принимает контекст в его конструкторе, и поэтому, когда вы вызываете getContext() в RecyclerView (ViewGroup), он возвращает действие.

+0

Спасибо за супер объяснение! Я упал умнее, чем раньше. –

Смежные вопросы