Items löschen aus String Array vom Custom Base Adapter

wer112

Top Contributor
Ich lade ja aus der Datenbank die Werte über ein Base Adapter in die App. Wenn jemand was angeklickt hat, soll es ja auch aus der Datenbank bestimmter Position gelöscht werden. Wenn es gelöscht ist, bekommt Volley die Antwort Okay. Wenn Volley Okay bekommen hat, dann soll auch das Element aus der List View gelöscht werden.
Habe nur was über RecyleView, Array_List gelesen und feste Werte. Aber würde gerne das aus der ListView löschen und dann den BaseAdapter neu aktualliesieren.

Mein Code:

Java:
LinkVisitCustomBaseAdapter linkVisitCustomBaseAdapter = new LinkVisitCustomBaseAdapter(getActivity(), id, linkTitel, link, download);
        listView.setAdapter(linkVisitCustomBaseAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long lo) {

                String url = link[position];


                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {

                        try {

                            Intent intent = new Intent();
                            intent.setAction(Intent.ACTION_VIEW);
                            intent.setData(Uri.parse(url));
                            startActivity(intent);

                        } catch (Exception e) {
                            e.printStackTrace();
                            Log.e("Exception Thread:" , e.toString());
                        } finally {

                            getActivity().runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(context, "Finish, now Volley", Toast.LENGTH_SHORT).show();

                                    final String url = "----";

                                    RequestQueue queue = Volley.newRequestQueue(context);

                                    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                                        @Override
                                        public void onResponse(String response) {

                                            if (response.equals("okay")){

                                                
                                            }else{
                                                AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialogTheme);
                                                View view = LayoutInflater.from(context).inflate(R.layout.layout_error_dialog, (ConstraintLayout)getActivity().findViewById(R.id.layoutDialogContainer));
                                                builder.setView(view);
                                                ((TextView)view.findViewById(R.id.textTitle)).setText("Fehlgeschlagen");
                                                ((TextView)view.findViewById(R.id.textView_error)).setText("Leider ist was Fehlgeschlagen.\nInformieren Sie den Support,\nwenn es öfters passiert.");
                                                ((Button)view.findViewById(R.id.buttonAction)).setText(getString(R.string.okay));
                                                ((ImageView)view.findViewById(R.id.image_error)).setImageResource(R.drawable.ic_error);

                                                final AlertDialog alertDialog = builder.create();
                                                alertDialog.setCancelable(false);

                                                view.findViewById(R.id.buttonAction).setOnClickListener(new View.OnClickListener() {
                                                    @Override
                                                    public void onClick(View v) {
                                                        alertDialog.dismiss();
                                                        startActivity(new Intent(context, login.class));

                                                    }
                                                });

                                                if (alertDialog.getWindow() != null){
                                                    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
                                                }



                                                alertDialog.show();
                                            }

                                        }
                                    }, new Response.ErrorListener() {
                                        @Override
                                        public void onErrorResponse(VolleyError error) {
                                            Log.e("LinkAktuVolleyError", error.toString());
                                        }
                                    }){

                                        @Nullable
                                        @Override
                                        protected Map<String, String> getParams() throws AuthFailureError {
                                            HashMap<String, String> param = new HashMap<>();

                                            return param;
                                        }
                                    };

                                    queue.add(stringRequest);
                                }
                            });

                        }
                    }
                });

                thread.start();

            }
        });

Und die Variablen:

Code:
    Integer[] id;
    String[] linkTitel;
    String[] link;
    Integer[] download;

und der BaseAdapter:

Java:
public class LinkVisitCustomBaseAdapter extends BaseAdapter {

    Context context;
    Integer listID[];
    String listTitel[];
    String listLinks[];
    Integer listDownload[];
    LayoutInflater layoutInflater;

    public LinkVisitCustomBaseAdapter(Context ctx, Integer[] id, String[] linkTitel, String[] link, Integer[] download){

        this.context = ctx;
        this.listID = id;
        this.listTitel = linkTitel;
        this.listLinks = link;
        this.listDownload = download;
        layoutInflater = LayoutInflater.from(ctx);

    }

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

    @Override
    public Object getItem(int position) {
        return  listTitel[position];
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = layoutInflater.inflate(R.layout.link_visit_listview, null);
        TextView titel = convertView.findViewById(R.id.textView_listview_titelVisit);
        TextView download = convertView.findViewById(R.id.textView_download_extra);

        Log.e("Position Download", "" + listDownload[position]);

        if(listDownload[position] == 2){
            download.setVisibility(View.VISIBLE);

        }else if(listDownload[position] == 1){
            download.setVisibility(View.INVISIBLE);
        }

        titel.setText(listTitel[position]);



        return convertView;
    }
}

Die Frage ist natürlich, wie lösche ich ein Item, wenn Volley sagt okay, nachdem der Nutzer es angeklickt hat.
Da ich aktuell mich auf BaseAdapter einstellen möchte, da ich ja das evtl. bei meinem App Store auch brauchen kann, das gewissene Apps aus der ListView gelöscht werden muss, weil die gesperrt werden(Jeden Illegaler Anwendung oder Schädliche), Würde ich gerne wissen, wie man dann das löschen kann, wenn man die Positon kennt. In dem jetzigen Fall, wenn man drauf geklickt hat...

ICh hoffe, ihr könnt mir irgendwie weiterhelfen und ich danke mich mal bei euch =)
 
Wenn du die Nachricht „OK“ Daten in der DB gelöscht bekommst solltest du auch die Daten in den 4 Arrays löschen und das neue Zeichen des Liste anstoßen.

Mit invalidateViews()

Denke daran das Elemente in allen vier Arrays zu löschen sind, sonnst stimmt die Reihenfolge nicht mehr.
Deshalb würde ich nicht mit vier Arrays arbeiten, sondern mit einer Daten Klasse arbeiten (OOP). Davon dann ein Array oder Liste halten.
Dann hast du nur ein Objekt was du dem Adapter übergibst.

 
Was ich in dein Code als sinnlos erachte ist das erstellen eine Threads in den OnItemClickListener . Du rufst anschließend gleich wieder der UI-Thread auf und macht jetzt alles im UI.

Den Request schickt Volley in einem Thread ab , und den Respons gibt dir Volley wider im UI .
 

Zurück
Oben