5

Ich habe ein benutzerdefiniertes Fragment, das an meine MainActivity angehängt ist. Die Layoutdatei des Fragments enthält das Recyclerview-Widget.parent.getContext in der onCreateViewHolder-Methode von RecyclerView.Adapter

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> 

In meinem RecyclerView.Adapter sieht die onCreateViewHolder Methode wie folgt:

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

Meine Frage ist, über die Viewgroup Eltern von dieser Methode. Diese ViewGroup ist mein RecyclerView-Widget, aber warum gibt mir parent.getContext einen Verweis auf meine MainActivity und nicht auf mein Fragment?

Antwort

11

Fragmente haben nicht wirklich einen Zusammenhang. Wenn Sie in einem Fragment arbeiten und einen Kontext benötigen, müssen Sie normalerweise getActivity() aufrufen. In diesem speziellen Fall wird der Kontext von der Aktivität an das Fragment an die RecyclerView weitergegeben - denken Sie daran, dass eine Ansicht einen Kontext in ihrem Konstruktor verwendet - und wenn Sie also auf der RecyclerView (der ViewGroup) getContext() aufrufen, gibt sie die Aktivität zurück.

+0

Vielen Dank für die super Erklärung! Ich bin schlauer geworden als zuvor. –