0

Ich habe das folgende Problem beim Versuch, ein Layout-Element in einer Klasse abzurufen.Wie kann ich ein ImageView, das in ein Fragmentlayout deklariert wurde, von einer Klasse, die Fragment und nicht Activity erweitert, korrekt abrufen?

So habe ich die folgende Situation:

1) Ich habe diese fragment_screen_slide_page.xml Datei, die das Element eines Fragments enthält, das in einer Ansicht angezeigt wird:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <!-- Dummy content. --> 
    <LinearLayout android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="0dp"> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="wrap_content" 
      android:scaleType="fitCenter" 
      android:layout_height="250dp" 
      android:background="@drawable/carbonara" /> 

     <TextView android:id="@android:id/text1" 
      style="?android:textAppearanceLarge" 
      android:textStyle="bold" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="16dp" /> 

    </LinearLayout> 

</ScrollView> 

Wie Sie können siehe es enthält die ImageView Element mit ID = imageView1.

Dann habe ich diese ScreenSlidePageFragment, die auf dem vorherigen Fragment funktioniert, habe ich so etwas wie dieses:

public class ScreenSlidePageFragment extends Fragment { 

    ................................................................ 
    ................................................................ 
    ................................................................ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     ................................................................ 
     ................................................................ 
     ................................................................ 
     // Retrieve the reference of the ImageView element of the layout having id=imgSlide: 
     ImageView imgSlideView = (ImageView) this.getActivity().findViewById(R.id.imageView1); 
     ................................................................ 
     ................................................................ 
     ................................................................ 
    } 

    ................................................................ 
    ................................................................ 
    ................................................................ 
} 

Wie Sie sehen können, in die onCreate() Methode, die ich das zurückzuholen versuche Image refernce des Elements mit id = imageView1 in die Datei fragment_screen_slide_page.xml definiert sind, durch diese Anweisung:

ImageView imgSlideView = (ImageView) this.getActivity().findViewById(R.id.imageView1); 

Ich habe this.getActivity getan(). FindViewById (R.id.imageView1), weil die ScreenSlidePageFragmentFragment erstreckt und nicht Aktivität so haben sie nicht die findViewById() Methode geerbt und Ich kann nicht direkt tun findViewById (R.id.imageView1); wie ich in einer Klasse, die Aktivität erstreckt.

Das Problem ist, dass auf diese Weise erhalten null als Ergebnis erhalten.

Warum? Was vermisse ich? Wie kann ich richtig mein Image in diefragment_screen_slide_page.xml erklärt abrufen Datei aus dem ScreenSlidePageFragment (das sich Fragment und nicht Aktivität)?

+1

Warum geben Sie die Dokumentation nicht aus? – Blackbelt

Antwort

1

bereiten: Code von oncreate zum onCreateView

public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) 
{ 
     View view = inflater.inflate(R.layout.fragment_screen_slide_page,container,false); 
     ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1); 
     return view;  
} 
1

Nennen Sie es innerhalb onViewCreated

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1); 
    } 
1

Statt onCreate() außer Kraft gesetzt bewegen, Sie onViewCreated() außer Kraft setzen könnten und erhalten Sie Ihre ImageView von dort:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1); 
}