ListView OnItemClicklistener setzen mit Ausgabe

wer112

Top Contributor
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:

Java:
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:

Java:
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:

Java:
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

Super-Moderator
Mitarbeiter
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

Top Contributor
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
 
Zuletzt bearbeitet:

wer112

Top Contributor
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.
Java:
 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

Top Contributor
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

Top Contributor
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...
Java:
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];
                ...
                
            }
        });
 

Jw456

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


 

wer112

Top Contributor
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

Top Contributor
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.
 
Zuletzt bearbeitet:

wer112

Top Contributor
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

Top Contributor
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.
 
Zuletzt bearbeitet:

wer112

Top Contributor
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:

Java:
       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:
Java:
      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

Top Contributor
Java:
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
Code:
  @Override
    public void onAttach(@NonNull Context context) {
        this.context = context;
        super.onAttach(context);
    }
 

wer112

Top Contributor
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.


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

Jw456

Top Contributor
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

Top Contributor
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
Java:
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

Top Contributor
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
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

Top Contributor
Java:
 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

Top Contributor
Java:
 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);
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

Top Contributor
Code:
@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();


    }

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


    }
 

wer112

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


    }
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

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

Java:
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


    }
 

wer112

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

Java:
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


    }
Java:
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

Top Contributor
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

Top Contributor
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???
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Android Problem mit ListView und OnItemClickListener.. Android & Cross-Platform Mobile Apps 10
J ListView Item individuell einfärben Android & Cross-Platform Mobile Apps 17
I Android ListView, Werte aktualisieren ohne die Liste komplett neu zu laden Android & Cross-Platform Mobile Apps 5
K Null-Pointer-Exception in ListView - wird über Datenbank gefüllt Android & Cross-Platform Mobile Apps 1
I Android ListView (Custom) soll auf Hardwaretasten nicht reagieren. Android & Cross-Platform Mobile Apps 10
W ListView und Arrays... Android & Cross-Platform Mobile Apps 68
W Android Wieso kann ich keine ListView mehr zum Layout hinzufügen? Android & Cross-Platform Mobile Apps 1
W Android Kann keine ListView mehr in der MainActivtiy anzeigen, obwohl noch sehr viel Platz frei ist Android & Cross-Platform Mobile Apps 1
L ListView aktuallisiert sich nicht Android & Cross-Platform Mobile Apps 15
N Probleme mit custom dynamic ListView Android & Cross-Platform Mobile Apps 15
L Android ListView kollabiert in Scrollview Android & Cross-Platform Mobile Apps 9
A ImageButton in ListView Item bei klick ändern Android & Cross-Platform Mobile Apps 3
J Android Suche in einer ListView Android & Cross-Platform Mobile Apps 3
H Android ArrayList <-> ArrayAdapter <-> ListView Android & Cross-Platform Mobile Apps 10
L Android ListView swipe zum löschen Android & Cross-Platform Mobile Apps 1
B Android ListView set custom check Image and delete Android & Cross-Platform Mobile Apps 0
M Android ListView wird nicht dargestellt Android & Cross-Platform Mobile Apps 2
Maresuke Android Android ListView Textfarbe und Texthintergrund ändern? Android & Cross-Platform Mobile Apps 5
S Listview Einträge aus "xml" Datei Android & Cross-Platform Mobile Apps 1
S Android Studio MySql Daten in Listview mit sub Item Android & Cross-Platform Mobile Apps 11
S Textdatei in ListView einlesen Tutorial gesucht!? Android & Cross-Platform Mobile Apps 3
kaoZ Tutorial .xml Layouting für z.B ListView elemente Android & Cross-Platform Mobile Apps 7
M Android ListView und Checkbox Android & Cross-Platform Mobile Apps 6
L TableRows in ListView darstellen Android & Cross-Platform Mobile Apps 2
M ListView mit ListAdapter füllen Android & Cross-Platform Mobile Apps 5
U Android ListView Frage Android & Cross-Platform Mobile Apps 6
L Android SearchBox für Custom Listview Android & Cross-Platform Mobile Apps 5
H Android ListView Images aus dem Internet via Thread Android & Cross-Platform Mobile Apps 3
T Android: ListView-Adapter: Adapter wird ständig aufgerufen Android & Cross-Platform Mobile Apps 2
H Android SAX|ListView NullPointerException Android & Cross-Platform Mobile Apps 2
A Probleme mit ListView / ArrayAdapter Android & Cross-Platform Mobile Apps 3
W String Array Pfad in Int setzen Android & Cross-Platform Mobile Apps 54
N "Schöne" Datatable in Android und setzen von Parametern von Textview im Code Android & Cross-Platform Mobile Apps 5
S onClickListener auf Buttons die im Code erzeugt wurden setzen. Android & Cross-Platform Mobile Apps 8
B Android Caller-ID Setzen? Android & Cross-Platform Mobile Apps 0

Ähnliche Java Themen

Neue Themen


Oben