Spinner öffnet Bild in einem Fragment

P

pagrf

Neues Mitglied
Threadstarter
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) {
        }


    }
 
S

SlayNox

Ambitioniertes Mitglied
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" />
 
P

pagrf

Neues Mitglied
Threadstarter
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 ();
    }


}
 
S

SlayNox

Ambitioniertes Mitglied
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...
 
P

pagrf

Neues Mitglied
Threadstarter
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 ();
    }


}
 
S

SlayNox

Ambitioniertes Mitglied
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
 
P

pagrf

Neues Mitglied
Threadstarter
was muss ich da genau wohin schreiben?
 
S

SlayNox

Ambitioniertes Mitglied
Wenn du Bilder anzeigen lassen willst, müssen die ja irgendwo liegen.
 
P

pagrf

Neues Mitglied
Threadstarter
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?
 
S

SlayNox

Ambitioniertes Mitglied
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.
 
P

pagrf

Neues Mitglied
Threadstarter
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 ();
 
S

SlayNox

Ambitioniertes Mitglied
Das habe ich dir doch schon gesagt, schau mal ein paar posts vorher
 
J

jogimuc

Erfahrenes Mitglied
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:
S

SlayNox

Ambitioniertes Mitglied
Wie schon erwähnt, habe ich das bereits weiter oben korrigiert
 
J

jogimuc

Erfahrenes Mitglied
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
-- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
@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:
P

pagrf

Neues Mitglied
Threadstarter
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 ();
        }

    }
 
J

jogimuc

Erfahrenes Mitglied
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:
P

pagrf

Neues Mitglied
Threadstarter
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)
 
Oben Unten