# ListView OnItemClicklistener setzen mit Ausgabe



## wer112 (28. Nov 2022)

Liebes Java Forum,

der Import und setzen der Listview ging super und alles wird von der DB angezeigt.
Leider bekomme ich keine Ausgabe, wenn ich auf das Produkt klicke. Es reagiert nicht.

Die Methode im Fragment:


```
private void ListViewMethode(){
       CustomBaseAdapter customBaseAdapter = new CustomBaseAdapter(getActivity(), produkte, produkt_titel, produkt_preis, images);
       listView.setAdapter(customBaseAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.e("Produkte wurde geklickt", "Position: " + i);
            }
        });

   }
```

Liegt es daran, das die Methode private ist? Sollte kein Problem darstellen, denke ich.

Und der BaseAdapter:


```
public class CustomBaseAdapter extends BaseAdapter {

    Context context;
    String listProdukte[];
    String listProduktTitel[];
    int listImages[];
    String listPreise[];

    LayoutInflater layoutInflater;

    public CustomBaseAdapter(Context ct, String[] produkte, String [] produkt_titel,  String [] produkt_preis, int [] images){
        this.context = ct;
        this.listProdukte = produkte;
        this.listProduktTitel = produkt_titel;
        this.listImages = images;
        this.listPreise = produkt_preis;
        layoutInflater = LayoutInflater.from(ct);
    }



    @Override
    public int getCount() {
        return listProduktTitel.length;
    }

    @Override
    public Object getItem(int i) {
        return listProduktTitel[i];
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }





    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = layoutInflater.inflate(R.layout.activity_custom_list_view, null);
        TextView produkt_titel = view.findViewById(R.id.textView_produkt);
        TextView preis = view.findViewById(R.id.textView_preise);
        ImageView imageView = view.findViewById(R.id.imageView_produkt);


        imageView.setImageResource(listImages[i]);
        produkt_titel.setText(listProduktTitel[i]);
        preis.setText(listPreise[i] + "€");



        return view;
    }
}
```

Oder muss ich es in dem Custom listView den Plazieren den KlickListener:


```
public class CustomListView extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_list_view);
    }
}
```

Da ich den ListView im Fragment setzte und die Leute setzen den ClickListener unter dem listview.setAdapter...

Ich habe mehrere Videos angesehen und war auch auf StackOverFlow, fand irgendwie nixs im Bezug auf ItemClick und wo er genau hinkommt, da die ja alle unter dem setAdapter plazieren.

Und Wenn ich jetzt Weiß, was angeklickt wurde(Name), Wie finde ich es draus?

Natürlich könnte man ja ein switch(position) machen, aber dann ist es nicht mehr dynamisch, wenn ein Produkt in der DB deaktiviert wurden ist...

Ich hoffe ihr kennt euch damit aus =)


----------



## KonradN (28. Nov 2022)

Rufst Du denn die Methode ListViewMethode irgendwo auf?

Und der Hinweis zu den Java Coding Guidelines: Methoden fangen mit einem kleinen Buchstaben an. Und es sollte mit einem Verb sein, damit klar ist, was gemacht wird. Und dann ist auch nicht zu sagen, dass es eine Methode ist.


----------



## Jw456 (28. Nov 2022)

Dein Log sollte eigentlich kommen dir die Pos der Liste geben.

Wo ist jetzt das Problem im Listener auf deine Liste zuzugreifen und mit der Pos den Eintrag auszugeben oder weiter zu benutzen.

Deine Liste ist doch bestimmt eine Instanzvariable.


Tipp ich würde auch nicht alle vier Eigenschaften in unerfindlichen Arrays halten.
Dazu würde ich eine Klasse mache mit den vier Eigenschaften produkte, produkt_titel, produkt_preis, images und davon eine Liste oder Array


----------



## wer112 (28. Nov 2022)

KonradN hat gesagt.:


> Rufst Du denn die Methode ListViewMethode irgendwo auf?
> 
> Und der Hinweis zu den Java Coding Guidelines: Methoden fangen mit einem kleinen Buchstaben an. Und es sollte mit einem Verb sein, damit klar ist, was gemacht wird. Und dann ist auch nicht zu sagen, dass es eine Methode ist.




```
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
            @SuppressLint("LongLogTag")
            @Override
            public void onResponse(JSONObject response) {
                Log.e("Ränge Response: ", response.toString());
                try {



                    prod = response.getJSONArray("produkte");
                    prod_tit = response.getJSONArray("produkt_titel");
                    prod_be = response.getJSONArray("produkt_beschreibung");
                    prod_pr = response.getJSONArray("produkt_preis");
                    prod_ima = response.getJSONArray("produkt_images");


                    Log.e("Produkte:", "" + prod);
                    Log.e("Preise:", "" + prod_pr);
                    Log.e("Images:", "" + prod_ima);

                    if (prod != null
                            && prod.length() > 0
                            && prod_tit != null
                            && prod_tit.length() > 0
                            && prod_be != null
                            && prod_be.length() > 0
                            && prod_pr != null
                            && prod_pr.length() > 0
                            && prod_ima != null
                            && prod_ima.length() > 0) {

                        Log.e("Leer Prüfung", "klappt hier alles");

                        List<String> prod_titel_list = new ArrayList<String>();
                        for (int i=0; i<prod_tit.length(); i++) {
                            prod_titel_list.add(prod_tit.getString(i));
                        }
                        produkt_titel = prod_titel_list.toArray(new String[prod_titel_list.size()]);

                        List<String> prod_preis_list = new ArrayList<String>();
                        for (int i=0; i<prod_pr.length(); i++) {
                            prod_preis_list.add( prod_pr.getString(i) );
                        }
                        produkt_preis = prod_preis_list.toArray(new String[prod_preis_list.size()]);


                        List<String> prod_image_list = new ArrayList<String>();
                        for (int i=0; i<prod_ima.length(); i++) {
                            prod_image_list.add(prod_ima.getString(i) );
                        }
                        image = prod_image_list.toArray(new String[prod_image_list.size()]);



                        images = getDrawableIds(image);




                        Log.e("integer: ", "" + Arrays.toString(images));



                        Log.e("ProduktString: ", produkt_titel.toString());

                        ListViewMethode();


                    }else{
                        Log.e("JsonImport: ", "leerer Import");
                    }



                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.e("JsonException: ", e.toString());
                }
            }
        }, new Response.ErrorListener() {
            @SuppressLint("LongLogTag")
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("RängeImportVolleyError: ", error.toString());
                Toast.makeText(getActivity(), "Import Error: " + error.toString(), Toast.LENGTH_SHORT).show();
            }
        });

        queue.add(jsonObjectRequest);
    }
```

Ich rufe im Volley Bereich es auf, nachdem alle JsonArray in Strings Array umgewandelt bekomme. Ja ich benutze sehr häufig Großbuchstaben, habe mir das bei Methoden angeeignet. Variablen sind bei mir anfangs klein.

Warum ist das keine Methode und was wäre es für ein Unterschied?


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Dein Log sollte eigentlich kommen dir die Pos der Liste geben.
> 
> Wo ist jetzt das Problem im Listener auf deine Liste zuzugreifen und mit der Pos den Eintrag auszugeben oder weiter zu benutzen.
> 
> Deine Liste ist doch bestimmt eine Instanzvariable.


Bei mir kommt garnixs an in den Log auch der Toast den ich mal genommen hatte, hat kein Ergebnis angezeigt. 
Deswegen frage ich ja, evtl, muss der Aufruf in die Coustom Class, aber da ist der ListView nicht deklariert und verbunden. 

Sobald es was anzeigt, muss ich irgendwie das Produkt erhalten, ohne ein Switch, da ja dann feststeht, das bei Pos 1 == Apfel ist und Pos 2 == Banane ist. Aber wenn das nicht anzeigt, haut ja alles nicht mehr hin.

Der Log wird nicht angezeigt... 

Und habe jetzt mal den Filter aus: Auch ohne Filter erhalte ich kein Log. Habe es in der Suchleiste eingegeben per copy & past


----------



## Jw456 (28. Nov 2022)

wird denn die liste angezeigt.

Teste mit dem Debugger ob du in den Listener kommst.


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> wird denn die liste angezeigt.


Ja die Liste wird entsprechend angezeigt, wenn ich auf meinem Hoster in der Tabelle ein produkt auf 0 setze, dann ist es nicht mehr zu sehen, aber die anderen. Deswegen geht auch switch ja net.

Aber erstmal möchte ich was angezeigt bekommen egal ob Log oder Toast


----------



## Jw456 (28. Nov 2022)

Teste mit dem Debugger ob du in den Listener kommst.


----------



## Jw456 (28. Nov 2022)

wer112 hat gesagt.:


> Natürlich könnte man ja ein switch(position) machen, aber dann ist es nicht mehr dynamisch, wenn ein Produkt in der DB deaktiviert wurden ist...




```
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.e("Produkte wurde geklickt", "Position: " + i);
                produktActiev = produkte[i];
                ...
                
            }
        });
```


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Teste mit dem Debugger ob du in den Listener kommst.


Ich weiß nicht ob du Log.d meinst mit Debugger, aber selbst da wird nixs angezeigt. Habe in der Suche: Produ eingegeben und nixs kamm, auch mit dem Vollständigen Key


----------



## Jw456 (28. Nov 2022)

Nein du setzt einen Breakpoint zb. auf das Log und stattest deine App mit den Deugger in der IDE der Käfer oben.










						Programmier Tutorial: Apps für Android entwickeln – Teil 14: Mit Debugging Programmfehler im Quellcode finden
					

In Android Studio ist ein mächtiger, interaktiver Debugger integriert, den wir zu Beginn dieser Lektion ausführlich vorstellen werden. Er wird uns später bei der Entwicklung unserer Android App noch sehr wichtige Dienste erweisen und helfen…




					www.programmierenlernenhq.de


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Nein du setzt einen Breakpoint zb. auf das Log und stattest deine App mit den Deugger in der IDE der Käfer oben.
> 
> 
> 
> ...


Damit komme ich nicht zurecht, ich habe dadrinnen keinen Überblick, wo ich siuchen muss. Habe diese Breakpoit am listener und einen beim Log gesetzt und die App dann gestartet...

Wo genacu muss ich suchen? Wie kann man das dann hier posten?


----------



## Jw456 (28. Nov 2022)

Wenn das Programm an den Brack Point kommt hält es an und du kannst zb deine Variablen anschauen. Also was in der Variablen i steht. Da zu musst du es natürlich in Debuggmodus starten mit dem Käfer.
Und wenn es anhält weißt du das du in den Listener kommst.

Natürlich musst du als User auf beim Test etwas aus der Liste Auswählen auf einen Listeneintrag lang oder kurz klicken.


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Wenn das Programm an den Brack Point kommt hält es an und du kannst zb deine Variablen anschauen. Also was in der Variablen i steht. Da zu musst du es natürlich in Debuggmodus starten mit dem Käfer.
> Und wenn es anhält weißt du das du in den Listener kommst.
> 
> Natürlich musst du als User auf beim Test etwas aus der Liste Auswählen auf einen Listeneintrag lang oder kurz klicken.


Geht nicht mehr, hatte vorhin viele Ordner und Variablen gehabt, aber in der OnItem Methode wird garnixs angezeigt.


----------



## Jw456 (28. Nov 2022)

Keine Ahnung was du mir sagen willst.


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Keine Ahnung was du mir sagen willst.


Wnn ich diesen Break Point setze, dann erhalte ich ja die Ergebnisse, aber die Break Points innerhalb des ItemClick werden nicht angezeigt. Glaube nicht, das es soweit rein geht, obwohl Die Break Point kreise anschließend ein Hacken haben.

Ich empfange überhaut nichts.


----------



## Jw456 (28. Nov 2022)

Es geht ja  nicht um Anzeigen sondern nur ob du überhaupt in due Methode kommst. Denn du hast gesagt das der Listener nicht aufgrufen wird.
Wenn der breakpoint aufgrufen wird. 
Ist der Fehler ein ander mehr nicht.

Du kannst jetzt selbst die Variablen anschauen und das Programm weiter laufen lassen. 



Beim Toast würde ich sagen falscher Context.

Schaue dir an wozu man einen Debugger nutzen kann.


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Wenn das Programm an den Brack Point kommt hält es an und du kannst zb deine Variablen anschauen. Also was in der Variablen i steht. Da zu musst du es natürlich in Debuggmodus starten mit dem Käfer.
> Und wenn es anhält weißt du das du in den Listener kommst.
> 
> Natürlich musst du als User auf beim Test etwas aus der Liste Auswählen auf einen Listeneintrag lang oder kurz klicken.


Habe ich getan, aber es wird nixs im Listener angezeigt, davor schon:


```
CustomBaseAdapter customBaseAdapter = new CustomBaseAdapter(getActivity(), produkte, produkt_titel, produkt_preis, images);
       listView.setAdapter(customBaseAdapter);
```

Wenn ich da das setze, erhalte ich die Variablen und sonst alles.

Wenn ich Dort die setze:

```
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d("Produkte wurde geklickt", "Position: " + i);

                String produkt = produkt_titel[i];
                Toast.makeText(getActivity(), "Position: "+ produkt, Toast.LENGTH_SHORT).show();

            }
        });
```

erhalte ich garnixs und es bleibt ller beim Debugger


----------



## Jw456 (28. Nov 2022)

getActivity ist nicht der richtige Context.


----------



## Jw456 (28. Nov 2022)

```
Context context;

 @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        context = view.getContext();
        ...
       
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d("Produkte wurde geklickt", "Position: " + i);

                String produkt = produkt_titel[i];
                Toast.makeText(context , "Position: "+ produkt, Toast.LENGTH_SHORT).show();
...
```
oder 

```
@Override
    public void onAttach(@NonNull Context context) {
        this.context = context;
        super.onAttach(context);
    }
```


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> getActivity ist nicht der richtige Context.


Aber dann müsste es trotzdem den Log anzeigen, da er kein Context braucht. und getContext klappt meistens Nicht, da man im Fragment ist. Jetzt habe ich getContext genommen, wird trotzdem nixs angezeigt.


----------



## Jw456 (28. Nov 2022)

Das Log wird auch kommen, wenn du es in der Logcat richtig einstellst.
Das Thema logcat hatten wir ja schon mal.


----------



## Jw456 (28. Nov 2022)

getContext auch falsch schaue post #20


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> Das Log wird auch kommen, wenn du es in der Logcat richtig einstellst.
> Das Thema logcat hatten wir ja schon mal.


Darum habe ich es mal ohne Filter probiert und habe den Key dort in die Suche eingetragen. Kommt aber nixs. Habe es auch Log.d genannt, aber auch nixs. 

das mit dem Context, habe ich So gemacht und habe Context context; ganz oben bei allen Variablen hinzugefügt. Der Listerner reagiert immer noch nicht.






						Listview ItemClickListener – Google Drive
					






					drive.google.com
				




Das sind die Ergebnisse, wenn ich den Break Point setze. Im Listerner habe ich nie was erhalten, nur davor. Habe verschiedene Points probiert.


----------



## Jw456 (28. Nov 2022)

In den ersten beiden Bildern bist du nicht in den Listener gekommen.

Beim letzten bist du zum Breakpoint gekommen. Aber das war ja nicht der Listener.

somit kann auch nichts angezeigt werden.

zeige mal die Klasse im ganzen


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> In den ersten beiden Bildern bist du nicht in den Listener gekommen.
> 
> Beim letzten bist du zum Breakpoint gekommen. Aber das war ja nicht der Listener.
> 
> ...




```
package ------;

import androidx.annotation.Nullable;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ---- extends Fragment {

    String produkte[] = {};
    String produkt_art[] = {};
    String produkt_titel[];
    String produkte_beschreibung[] = {};
    String produkt_preis[];
    String produkt_aktiv[] = {};
    ListView listView;

    String image[] = {};

    JSONArray prod = null;
    JSONArray prod_tit = null;
    JSONArray prod_be = null;
    JSONArray prod_pr = null;
    JSONArray prod_ima = null;

    Context context;


    int[] images = {};



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

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

        View fragmentlayout_--- = inflater.inflate(R.layout.activity_---, null);

        Import---();

        listView = (ListView) fragmentlayout_---.findViewById(R.id.---_listview);


        return fragmentlayout_--;
    }

    private void Import---() {
        Log.e("Import: ", "---");
        final String url = "https:---";

        RequestQueue queue = Volley.newRequestQueue(getActivity());

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
            @SuppressLint("LongLogTag")
            @Override
            public void onResponse(JSONObject response) {
                Log.e("---Response: ", response.toString());
                try {



                    prod = response.getJSONArray("produkte");
                    prod_tit = response.getJSONArray("produkt_titel");
                    prod_be = response.getJSONArray("produkt_beschreibung");
                    prod_pr = response.getJSONArray("produkt_preis");
                    prod_ima = response.getJSONArray("produkt_images");


                    Log.e("Produkte:", "" + prod);
                    Log.e("Preise:", "" + prod_pr);
                    Log.e("Images:", "" + prod_ima);

                    if (prod != null
                            && prod.length() > 0
                            && prod_tit != null
                            && prod_tit.length() > 0
                            && prod_be != null
                            && prod_be.length() > 0
                            && prod_pr != null
                            && prod_pr.length() > 0
                            && prod_ima != null
                            && prod_ima.length() > 0) {

                        Log.e("Leer Prüfung", "klappt hier alles");

                        List<String> prod_titel_list = new ArrayList<String>();
                        for (int i=0; i<prod_tit.length(); i++) {
                            prod_titel_list.add(prod_tit.getString(i));
                        }
                        produkt_titel = prod_titel_list.toArray(new String[prod_titel_list.size()]);

                        List<String> prod_preis_list = new ArrayList<String>();
                        for (int i=0; i<prod_pr.length(); i++) {
                            prod_preis_list.add( prod_pr.getString(i) );
                        }
                        produkt_preis = prod_preis_list.toArray(new String[prod_preis_list.size()]);


                        List<String> prod_image_list = new ArrayList<String>();
                        for (int i=0; i<prod_ima.length(); i++) {
                            prod_image_list.add(prod_ima.getString(i) );
                        }
                        image = prod_image_list.toArray(new String[prod_image_list.size()]);



                        images = getDrawableIds(image);




                        Log.e("integer: ", "" + Arrays.toString(images));



                        Log.e("ProduktString: ", produkt_titel.toString());

                        ListViewMethode();


                    }else{
                        Log.e("---- ", "---");
                    }



                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.e("JsonException: ", e.toString());
                }
            }
        }, new Response.ErrorListener() {
            @SuppressLint("LongLogTag")
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("--VolleyError: ", error.toString());
                Toast.makeText(getActivity(), "---: " + error.toString(), Toast.LENGTH_SHORT).show();
            }
        });

        queue.add(jsonObjectRequest);
    }


    private int getDrawableId(String drawableName) {
        return getResources().getIdentifier(
                drawableName,
                "drawable",
                getActivity().getPackageName()
        );
    }

    private int[] getDrawableIds(String[] drawableNames) {
        int[] ids = new int[drawableNames.length];
        for (int i = 0; i < drawableNames.length; i++) {
            ids[i] = getDrawableId(drawableNames[i]); // hier wird die Methode oben aufgerufen -> für ein Bild
        }
        return ids;
    }

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

        Context context;
        context = view.getContext();


    }

    private void ListViewMethode(){
       CustomBaseAdapter customBaseAdapter = new CustomBaseAdapter(getActivity(), produkte, produkt_titel, produkt_preis, images);
       listView.setAdapter(customBaseAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.i("Produkte wurde geklickt", "Position: " + i);

                String produkt = produkt_titel[i];
                Toast.makeText(context, "Position: "+ produkt, Toast.LENGTH_SHORT).show();

            }
        });

   }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}
```

Die anderen Classen, stehen ja komplett bei der #1


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> In den ersten beiden Bildern bist du nicht in den Listener gekommen.
> 
> Beim letzten bist du zum Breakpoint gekommen. Aber das war ja nicht der Listener.
> 
> ...


Bei 2 mal habe ich den Break Point im Listerner gesetzt, wurde nixs angezeigt. Wenn ich den Break Point davor beim CustomListVie setzte, erhalte ixh den Ordner mit allen Variablen. Aktuell [6] Array Elemente... und Bilder ect.


----------



## Jw456 (28. Nov 2022)

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

        View fragmentlayout_--- = inflater.inflate(R.layout.activity_---, null);
// besser
     View view = inflater.inflate(R.layout.activity_ , container, false);
```


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> ```
> public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
> 
> View fragmentlayout_--- = inflater.inflate(R.layout.activity_---, null);
> ...


Kannst du bitte erklären, was das mit den container und falsch zu tun hat? Habe in alle Fragmente so benutzt.

Auch mit der Änderung bekomme ich immer noch keine Ausgabe. ICh versuche im Adapter was zu erhalten aber da auch nicht...


----------



## Jw456 (28. Nov 2022)

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

        Context context;  // das ist eine lokale Variable keine Instanzvariable
        context = view.getContext();


    }
```


```
@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        context = view.getContext();


    }
```


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


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


Hatte es vergessen rauszu löschen, hatte das ja oben gesetzt, aber nixs. den Zwischen Toast wird mir angezeigt, ging nicht mit context, musste also wieder getActivity machen. Der wurde angezeigt. 

aber irgendwie will die App nicht in den Listener rein.


----------



## Jw456 (28. Nov 2022)

ich packe den code auch immer in die onViewCreated und nicht in die onCreateView. 
da reicht 


```
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
 
     return inflater.inflate(R.layout.activity_ , container, false);
 }
    
    
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        context = view.getContext();
        
        // jetzt dein Code


    }
```


----------



## Jw456 (28. Nov 2022)

Fragment lifecycle  |  Android Developers
					






					developer.android.com


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> ich packe den code auch immer in die onViewCreated und nicht in die onCreateView.
> da reicht
> 
> 
> ...




```
package com.-------;

import androidx.annotation.Nullable;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ---- extends Fragment {

    String produkte[] = {};
    String produkt_art[] = {};
    String produkt_titel[];
    String produkte_beschreibung[] = {};
    String produkt_preis[];
    String produkt_aktiv[] = {};
    ListView listView;

    String image[] = {};

    JSONArray prod = null;
    JSONArray prod_tit = null;
    JSONArray prod_be = null;
    JSONArray prod_pr = null;
    JSONArray prod_ima = null;

    Context context;


    int[] images = {};




    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
     return inflater.inflate(R.layout.activity_---, container, false);
    
    }

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

        Import---();

        listView = (ListView)view.findViewById(R.id.---_listview);

    }

    private void Import---() {
        Log.e("Import: ", "---");
        final String url = "https://---";

        RequestQueue queue = Volley.newRequestQueue(getActivity());

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
            @SuppressLint("LongLogTag")
            @Override
            public void onResponse(JSONObject response) {
                Log.e("Ränge Response: ", response.toString());
                try {



                    prod = response.getJSONArray("produkte");
                    prod_tit = response.getJSONArray("produkt_titel");
                    prod_be = response.getJSONArray("produkt_beschreibung");
                    prod_pr = response.getJSONArray("produkt_preis");
                    prod_ima = response.getJSONArray("produkt_images");


                    Log.e("Produkte:", "" + prod);
                    Log.e("Preise:", "" + prod_pr);
                    Log.e("Images:", "" + prod_ima);

                    if (prod != null
                            && prod.length() > 0
                            && prod_tit != null
                            && prod_tit.length() > 0
                            && prod_be != null
                            && prod_be.length() > 0
                            && prod_pr != null
                            && prod_pr.length() > 0
                            && prod_ima != null
                            && prod_ima.length() > 0) {

                        Log.e("Leer Prüfung", "klappt hier alles");

                        List<String> prod_titel_list = new ArrayList<String>();
                        for (int i=0; i<prod_tit.length(); i++) {
                            prod_titel_list.add(prod_tit.getString(i));
                        }
                        produkt_titel = prod_titel_list.toArray(new String[prod_titel_list.size()]);

                        List<String> prod_preis_list = new ArrayList<String>();
                        for (int i=0; i<prod_pr.length(); i++) {
                            prod_preis_list.add( prod_pr.getString(i) );
                        }
                        produkt_preis = prod_preis_list.toArray(new String[prod_preis_list.size()]);


                        List<String> prod_image_list = new ArrayList<String>();
                        for (int i=0; i<prod_ima.length(); i++) {
                            prod_image_list.add(prod_ima.getString(i) );
                        }
                        image = prod_image_list.toArray(new String[prod_image_list.size()]);



                        images = getDrawableIds(image);




                        Log.e("integer: ", "" + Arrays.toString(images));



                        Log.e("ProduktString: ", produkt_titel.toString());

                        ListViewMethode();


                    }else{
                        Log.e("JsonImport: ", "leerer Import");
                    }



                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.e("JsonException: ", e.toString());
                }
            }
        }, new Response.ErrorListener() {
            @SuppressLint("LongLogTag")
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("---VolleyError: ", error.toString());
                Toast.makeText(getActivity(), "Import Error: " + error.toString(), Toast.LENGTH_SHORT).show();
            }
        });

        queue.add(jsonObjectRequest);
    }





    private int getDrawableId(String drawableName) {
        return getResources().getIdentifier(
                drawableName,
                "drawable",
                getActivity().getPackageName()
        );
    }

    private int[] getDrawableIds(String[] drawableNames) {
        int[] ids = new int[drawableNames.length];
        for (int i = 0; i < drawableNames.length; i++) {
            ids[i] = getDrawableId(drawableNames[i]); // hier wird die Methode oben aufgerufen -> für ein Bild
        }
        return ids;
    }


    private void ListViewMethode(){
       CustomBaseAdapter customBaseAdapter = new CustomBaseAdapter(getActivity(), produkte, produkt_titel, produkt_preis, images);
       listView.setAdapter(customBaseAdapter);

        Toast.makeText(getActivity(), "Zwischen Toast", Toast.LENGTH_SHORT).show();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(getActivity(), "Zwischen Toast Brote", Toast.LENGTH_SHORT).show();
                Log.i("Produkte wurde geklickt", "Position: " + i);

                String produkt = produkt_titel[i];
                Toast.makeText(getActivity(), "Position: " + produkt, Toast.LENGTH_SHORT).show();

            }
        });

   }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }
}
```

Habe das so umgestellt wie du es gesagt hast, aber was ist der unterschied? Ich sollte damals denn code nicht in Oncread machen, sondern in das wo du gesagt hast nicht darein...

Habe es ausprobiert, bekomme trotzdem nur den Zwischen Toast angezeigt und ich komme trotzdem nicht in den Listener rein...


----------



## Jw456 (28. Nov 2022)

wenn du das bekommst bist du ja im listener
  Toast.makeText(getActivity(), "Zwischen Toast Brote", Toast.LENGTH_SHORT).show();

zwei auf einmal da kommt meistens nur einer durch.


----------



## wer112 (28. Nov 2022)

Jw456 hat gesagt.:


> wenn du das bekommst bist du ja im listener
> Toast.makeText(getActivity(), "Zwischen Toast Brote", Toast.LENGTH_SHORT).show();
> 
> zwei auf einmal da kommt meistens nur einer durch.


Das zwichen Brot kommt, aber nicht das zweite, normalerweiße spielt es hintereinander ab.

Ich entferne mal das zwischen Toast. Ergebniss: kein zwichen Toast Brot erhalten. Also im Listener komme ich nicht, aber nur draußen hin. 
Ich weiß nicht, wiso ich da nicht reinkomme. Habe ich was falsch gemacht oder ist der ListVie falsch oder Adabter? 

oder muss ich den Listener in die Custom Klasse reinmachen???


----------

