Spinner öffnet Bild in einem Fragment

  • 17 Antworten
  • Letztes Antwortdatum
P

pagrf

Neues Mitglied
0
Hallo da ich beim Google erfolglos bleib, nun hier:
Ich möchte in einem Fragment ein Bild durch einen Spinner öffnen. D.h. wird beispielsweise das 3. Element im Spinner ausgewählt möchte ich ein bestimmtes Bild öffnen und wenn es möglich wäre noch einen Toast mit dem Namen des ausgewählten Elements.
Wenn ich nun ein anderes Element auswähle soll das alte Bild verschwinden und ein neues angezeigt werden.

Hier ist der Code meines Fragments: (Der Spinner ist schon vorhanden)

Code:
public class polynomfunktionen_fragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate ( R.layout.fragment_polynomfunktionen,container,false );

        String[] values = {"","Bitte auswählen", "f(z)=z","f(z)=z+z^2","f(z)=z+z^2+z^3","f(z)=z+z^2+z^3+z^4","f(z)=z+z^2+z^3+z^4+z^5","f(z)=z+z^2+z^3+z^4+z^5+z^6"};

        Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
        ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
        adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( adapter );

        return v;



        }



        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {


        }


        public void onNothingSelected(AdapterView<?> parent) {
        }


    }
 
Hallo pagrf,
dein Quellcode ist leider Fehlerhaft. Wir waren doch gestern schon etwas weiter. Versuch es hiermit. Aber bitte lerne die Grundlagen

Code:
public class polynomfunktionen_fragment extends Fragment {


    ImageView IV_Bild;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate ( R.layout.fragment_polynomfunktionen,container,false );

        String[] values = {"Bild 1", "Bild 2, "Bild 3"};
        int[] images = {R.drawable.bild1,R.drawable.bild2,R.drawable.bild3};
   
        IV_Bild = (ImageView) view.findViewById(R.id.imageView);
   
        Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
        ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
        adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( adapter );
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    changeImage(position);
            }

            public void onNothingSelected(AdapterView<?> parent) {
                     Toast.makeText(getActivity(),"Es wurde nichts gewählt", Toast.LENGTH_LONG).show();
            }
        });

        return v;

    }
 
    private void changeImage(int pos){
        IV_Bild.setImageDrawable();
        Toast.makeText(getActivity(),"Es wurde " + values[pos] + " gewählt", Toast.LENGTH_LONG).show();
    }
}

Du musst ebenfalls dein Layout ergänzen

Code:
<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/ic_launcher" />
 
Ich bekomme folgende Errormeldungen:

error: cannot find symbol variable view
error: method setImageDrawable in class ImageView cannot be applied to given types; required: Drawable found: no arguments reason: actual and formal argument lists differ in length
error: cannot find symbol variable values

Code:
public class polynomfunktionen_fragment extends Fragment {

    ImageView imageView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate ( R.layout.fragment_polynomfunktionen,container,false );

        String[] values = {"","Bitte auswählen", "f(z)=z","f(z)=z+z^2","f(z)=z+z^2+z^3","f(z)=z+z^2+z^3+z^4","f(z)=z+z^2+z^3+z^4+z^5","f(z)=z+z^2+z^3+z^4+z^5+z^6"};
        int[] images = {R.drawable.bild1,R.drawable.bild2,R.drawable.bild3};
        imageView = (ImageView) view.findViewById(R.id.imageView);


        Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
        ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
        adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( adapter );

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener () {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                changeImage(position);
            }

            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(getActivity(),"Es wurde nichts gewählt", Toast.LENGTH_LONG).show();
            }
        });

        return v;

    }

    private void changeImage(int pos) {
        imageView.setImageDrawable ();
        Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
    }


}
 
error: cannot find symbol variable view
-> dann ändere view in v
error: method setImageDrawable in class ImageView cannot be applied to given types; required: Drawable found: no arguments reason: actual and formal argument lists differ in length
->
int[] images = {R.drawable.bild1,R.drawable.bild2,R.drawable.bild3}; muss schon deiner Bilder IDs beinhalten. Außerdem muss die anzahl deiner Auswahlmöglichkeiten values die gleich anzahl deiner bilder images sein.

error: cannot find symbol variable values
übergeb die variable values in die Methode changeImage
Code:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
               changeImage(position, values);
           }
und
Code:
private void changeImage(int pos,values) {
       imageView.setImageDrawable ();
       Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
   }

Schaue dir doch erstmal ein paar grundlagen an. Es gibt so viele Tutorials.
Es ist zwar schön eine solche Anwendung zu schreiben aber es macht keinen Sinn wenn du gar nicht weißt warum Sie funktioniert...
 
  • Danke
Reaktionen: pagrf
Vielen Dank! Ich habe mir schon reichlich Videos angeschaut, jedoch gibt es kaum welche zum Teilbereich Fragment.

Ich bekomme jetzt den error: <identifier> expected, welcher mit values zu tun hat nach changeImage

Code:
public class polynomfunktionen_fragment extends Fragment {

    ImageView imageView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate ( R.layout.fragment_polynomfunktionen,container,false );

        String[] values = {"f(z)=z","f(z)=z+z^2","f(z)=z+z^2+z^3"};
        int[] images = {R.drawable.bild1,R.drawable.bild2,R.drawable.bild3};
        imageView = (ImageView) v.findViewById(R.id.imageView);


        Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
        ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
        adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( adapter );

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener () {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                changeImage(position,values);
            }

            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(getActivity(),"Es wurde nichts gewählt", Toast.LENGTH_LONG).show();
            }
        });

        return v;

    }

    private void changeImage(int pos, values) {
        imageView.setImageDrawable ();
        Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
    }


}
 
Code:
private void changeImage(int pos, String[] values) {
       imageView.setImageDrawable ();
       Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
   }
Pass bitte auch noch die ids in images an
 
  • Danke
Reaktionen: pagrf
was muss ich da genau wohin schreiben?
 
Wenn du Bilder anzeigen lassen willst, müssen die ja irgendwo liegen.
 
  • Danke
Reaktionen: pagrf
Ja, die habe ich unter dem Ordner drawable abgelegt

Meine Bilder heißen bild1, bild2, bild3

Wie binde ich diese nun in den code ein?
 
Wenn das so ist solltest du keine Probleme mehr haben.
Sollten diese Bilder jpg oder png Format haben sein, musst du eben schnell googlen wie du diese zu Drawable oder zu Bitmap umwandelst.
 
Habe ich gemacht bekomme aber immernoch den fehler. Dieser hat offensichtlich was damit zu tun, dass nach int pos ein values kommt. Wie kann ich das lösen??

Code:
private void changeImage(int pos,values) {
            imageView.setImageDrawable ();
            Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
 
Das habe ich dir doch schon gesagt, schau mal ein paar posts vorher
 
Hallo ich mische mich mal etwas ein.

private void changeImage(int pos,values) {
Kann nicht gehen für values fehlt der Datentype.


Ich würde es in etwa so machen da du ja schon die Ressourcen in einem Array hast.

private void changeImage(int pos, String[] values, int[] images) {
imageView.setImageDrawable(getResources().getDrawable(images[pos]));
Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: pagrf
Wie schon erwähnt, habe ich das bereits weiter oben korrigiert
 
  • Danke
Reaktionen: pagrf
Du sagst du hast gegoogelt wie man dem ImageView. ein drawable gibt.
Dann wundert mich was das soll.

imageView.setImageDrawable ();

In der Kammer fehlt das drawable.

Schaue meinen Code weiter oben
[doublepost=1567782760,1567782506][/doublepost]@SlayNox sorry dachte du bist der TE.
Und der TE scheint es immer noch gemerkt zu haben.

@pagrf JAVA Gundlagen wären hier wohl vom Vorteil
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: pagrf
Ok erstmal großen dank an euch bekomme nun aber einen andern error

error: method changeImage in class polynomfunktionen_fragment cannot be applied to given types; required: int,String[],int[] found: int,String[] reason: actual and formal argument lists differ in length

und


C:\Users\User\AndroidStudioProjects\KomplexeFunktionenTest\app\src\main\java\com\example\komplexefunktionentest\polynomfunktionen_fragment.java:
uses or overrides a deprecated API.
Recompile with -Xlint:deprecation for details.
Code:
public class polynomfunktionen_fragment extends Fragment {

    ImageView imageView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate ( R.layout.fragment_polynomfunktionen,container,false );

        String[] values = {"f(z)=z","f(z)=z+z^2","f(z)=z+z^2+z^3"};
        int[] images = {R.drawable.bild2,R.drawable.bild2,R.drawable.bild3};
        imageView = (ImageView) v.findViewById(R.id.imageView);


        Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
        ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
        adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( adapter );

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener () {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                changeImage(position,values);
            }

            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(getActivity(),"Es wurde nichts gewählt", Toast.LENGTH_LONG).show();
            }
        });

        return v;

    }


        private void changeImage(int pos,String[]values,int[]images) {
            imageView.setImageDrawable (getResources ().getDrawable (images[pos] ));
            Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
        }

    }
 
Ja dann soltest du auch den neuen Parameter beim aufruf der Methode mit übergeben.
changeImage(position,values);
Da hat du nur zwei Variablen in der Methode sind es nun drei
Nun denke nach was da fehlt.

changeImage(position,values,images );
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: pagrf
Nochmals vielen Dank @jogimuc
Ich bekomme nun keine Errormeldungen mehr :1f605:
Jedoch wenn ich die App versuche zu starten, dann stürzt sie direkt ab.
Ich schicke euch mal das Logcat.
Code:
Process: com.example.komplexefunktionentest, PID: 28635
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object reference
        at com.example.komplexefunktionentest.polynomfunktionen_fragment.changeImage(polynomfunktionen_fragment.java:58)
        at com.example.komplexefunktionentest.polynomfunktionen_fragment.access$000(polynomfunktionen_fragment.java:22)
        at com.example.komplexefunktionentest.polynomfunktionen_fragment$1.onItemSelected(polynomfunktionen_fragment.java:44)
        at android.widget.AdapterView.fireOnSelected(AdapterView.java:947)
        at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:936)
        at android.widget.AdapterView.access$300(AdapterView.java:56)
        at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:901)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
 
Zurück
Oben Unten