0

Ich bin absolut neu in Android-Entwicklung und ich habe ein Problem bei der Entwicklung meiner ersten App.Warum kann ich kein Hintergrundbild in ein ImageView setzen, das zu einer XML-Fragmentkonfiguration aus der zugehörigen Fragmentklasse deklariert wurde?

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 dargestellt ist, und haben ein Bild zu zeigen, wenn es in die geladen wird eine Aktivität:

<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 man es enthält den Image Element sehen id = imageView1 (wo das Bild geladen werden müssen, wenn das Fragment in die Aktivität putted ist) aufweist.

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

public class ScreenSlidePageFragment Fragment erstreckt {

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    System.out.println("PAGE NUMBER: "+ mPageNumber + 1); 
    // Inflate the layout containing a title and body text. 
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_screen_slide_page, container, false); 

    // Set the title view to show the page number. 
    ((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.title_template_step, mPageNumber + 1)); 
    System.out.println("TESTO: "+ getString(R.string.title_template_step, mPageNumber + 1)); 

    // Obtain the colosseum_icon.png from the rsources as a Drawable: 
    Drawable drawable = getResources().getDrawable(R.drawable.colosseum_icon); 

    // Retrieve the reference of the ImageView element of the layout having id=imgSlide: 
    View view = inflater.inflate(R.layout.fragment_screen_slide_page,container,false); 
    ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1); 

    final int sdk = android.os.Build.VERSION.SDK_INT; 
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     imgSlideView.setBackgroundDrawable(drawable); 
    } else { 
           //imgSlideView.setBackground(getResources().getDrawable(R.drawable.colosseum_icon)); 
    } 

    return rootView; 
} 
    ................................................................ 
    ................................................................ 
    ................................................................ 
} 

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

}

a So können Sie Sehen Sie, in die onCreateView() Methode ich grundsätzlich folgende Operation:

1) I Abrufen der Image Element-Referenz mit id = imageView1 innerhalb der vorherigen fragment_screen_slide_page.xml erklärte Datei.

2) stellte ich einen abgerufenen ziehbar als Hintergrund dieser Image tun:

imgSlideView.setBackgroundDrawable(drawable) 

Ich gehe davon aus, dass dieses Bild auf meinem Bildschirm gezeigt werden, aber es nicht passieren. Das Bild, das sich auf die abgerufene Zeichnungsvariable bezieht, wird nicht angezeigt. Anstelle des Bildes erscheint ein leerer Bereich mit 250dp als Höhe (wie in der XML angegeben). Unter dem leeren Bild erscheint der erwartete Inhalt der TextView

Warum? Was vermisse ich? Wie kann ich dieses Problem beheben?

Tnx

Antwort

2

Erstens würden Sie android:src="@drawable/carbonara" statt android:background="@drawable/carbonara" auf Ihrem Image verwenden, und Sie setzen .setImageDrawable statt .setBackgroundDrawable

Next - View view = inflater.inflate(R.layout.fragment_screen_slide_page,container,false); ist nicht erforderlich und sollte entfernt werden.Statt ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1); sollte es ImageView imgSlideView = (ImageView) rootView.findViewById(R.id.imageView1);

Auch dies natürlich

final int sdk = android.os.Build.VERSION.SDK_INT; 
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     imgSlideView.setBackgroundDrawable(drawable); 
} 

nur sein aktiviert ist sdk niedriger als Jelly Bean (Ich bin nicht sicher, ob das auf der Testumgebung gilt).

1

Die Funktion Aufblasen erzeugt jedes Mal eine neue Ansicht. Sie haben zweimal angerufen, also haben Sie zwei verschiedene Ansichten: view und rootView, und rootView zurückgeben, so Das Fragment wird rootView, keine Ansicht anzeigen. kein Bild. Änderungen wie folgt aus:

// Retrieve the reference of the ImageView element of the layout having id=imgSlide: 
ImageView imgSlideView = (ImageView) rootView.findViewById(R.id.imageView1) 

Jahr und mehr, sollte Image Android verwenden: src und setImageDrawable wird

Alles in Ordnung sein.

hinzugefügt, dieser Code-Block hat Problem:

final int sdk = android.os.Build.VERSION.SDK_INT; 
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     // if your phone version below 4.1 
    imgSlideView.setBackgroundDrawable(drawable); 
} else { 
          //imgSlideView.setBackground(getResources().getDrawable(R.drawable.colosseum_icon)); 
} 

, wenn Ihr Telefon, Android-Version ist größer als 4,1 (ich glaube, so -_- |), die Sie nicht Ihr Bild ändern. Damit wird der else-Code entfernt.

+0

Es ist immer noch leer :-( – AndreaNobili

1

Verwendung setImageResource() anstelle von setBackgroundDrawable()

So sollte es

imageView.setImageResource (R.drawable.your_image) sein;