Suche Tutorial oder Beispiel zu OnItemLongClickListener

  • 8 Antworten
  • Letztes Antwortdatum
T

thomas_21

Neues Mitglied
0
Hallo,

ich möchte aus meiner ListView, die mit Daten aus einer Datenbank gefüllt wird, natürlich auch wieder Daten löschen.
Soweit ich mich belesen habe kann ich das auch mit einem OnItemLongClickListener bei einem längeren Klick auf einen Listeneintrag bewerkstelligen.
Nun bin ich auf der Suche nach Tutorials oder Codebeispielen wo Datensätze per OnItemLongClickListener aus einem ListView gelöscht werden.

Hat jemand einen Link, einen Tipp oder sogar ein Codebeispiel für mich?

Was mich speziell dabei interessiert, wie man eventuell noch einen Dialog mit einer Sicherheitsabfrage (nach dem Motto: Woll'n Sie wirklich... ? :cool2: ) dabei einbaut.

Gruß Thomas
 
Hi,
ich habe natürlich selbst schon mal weiter versucht. Um klein anzufangen und mich an die Sache ran zu tasten will ich erst mal das die Einträge meiner ListView überhaupt auf einen Klick reagieren.

dazu habe ich versucht dieses how to für meine Zwecke umzumünzen:

Code:
public class ArchivActivity extends Activity {
    
    
    ListView list1;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_archiv);
         list1 = (ListView) findViewById(R.id.archivlistView);
         

     list1.setOnItemClickListener(
             new OnItemClickListener()
             {

                 @Override
                 public void onItemClick(AdapterView<?> arg0, View view,
                         int position, long id) {
                     // TODO Auto-generated method stub
                     Object o = list1.getItemAtPosition(position);
                     String eintrag = o.toString();
                     Toast.makeText(getApplicationContext(), "Du hast folgenden Eintrag angeklickt: " + " " + eintrag, Toast.LENGTH_LONG).show();

                 }   
             }       
     );

      }
       
    
}
Aber alleine das funktioniert schon nicht. :confused2:
Ich brauche Hilfe.

Gruß Thomas
 
Was genau funktioniert denn nicht?
Bekommst du ne Fehlermeldung? Wenn ja welche?
 
Hallo,

nein ich bekomme keine Fehlermeldung. Bei dem Beispiel oben sollte fürs erste eigentlich nur bei einem Klick auf einen Listeneintrag ein Toast ausgegeben werden.
Wenn ich jetzt auf einen Listeneintrag klicke passiert nichts, außer das der entsprechende Listeneintrag kurz beim antippen/klicken andersfarbig wird.
 
In Deinem "onItemClick" dürftest Du doch garkeinen Zugriff auf "list1" haben? Wundert mich, dass da keine Fehlermeldung kommt. o.O

Grundsätzlich würde ich Dir aber empfehlen, die gesammte Klasse von "OnItemClickListener" ableiten zu lassen. Dann kannst Du die Methode "onItemClick" direkt bei Dir in die Klasse einbauen und hast somit Zugriff auf alle Membervariablen.
 
Innere Klasse haben doch Zugriff auf die Variablen der umgebende Klasse oder irre ich mich gerade?
Deshalb kann man ja auch list1 zugreifen.
 
Hallo, ich muss nochmal auf mein Problem zurückkommen.

Ich habe jetzt dieses Tutorial als ein Beispiel für ein onClick auf ein ListView ausprobiert. Und.. funktioniert natürlich tadellos.

Also habe ich versucht es für meine App nach Anpassungen zu übernehmen.
Bei meiner App gibt es aber zu dem o.g. Tutorial einen Unterschied. Bei dem o.g. Tutorial wird das ListView mit einem festgelegten String gefüllt.

Code:
[FONT=Calibri][FONT=Calibri] private String listview_array[] = { "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX",[/FONT] [FONT=Calibri]"SEVEN", "EIGHT", "NINE", "TEN" };[/FONT][/FONT]
Dementsprechend sieht auch die Zeile mit dem Adapter aus.
Code:
[FONT=Calibri][FONT=Calibri]lv.setAdapter(new ArrayAdapter<String>(this,[/FONT][/FONT][FONT=Calibri][FONT=Calibri]android.R.layout.simple_list_item_1, listview_array));[/FONT][/FONT]
Bei meiner App wird das ListView aus einer anderen Activity mit dem Inhalt einer Datenbank gefüllt. Es ist auch irgendwie so ein Entry mit im Spiel. (hoffentlich habe ich das jetzt mit meinem Anfängerlatein einigermaßen richtig rüber gebracht. :bored: ) Ich habe das nach diesem VideoTutorial gemacht.

So sieht die Methode zum füllen des ListView in meiner StartActivity aus.
Code:
public void onClick(View v) {
        
           setContentView(R.layout.activity_archiv); // wechsel zur ArchivActivity
           mainisopen = false;
           
           Plaenearchiv.clear();
           try {
               datasource.open();
               Plaenearchiv = datasource.getAllEntries();
               datasource.close();
           }
           catch (Exception ex) {
               Toast.makeText(this, ex.toString(), Toast.LENGTH_SHORT).show();
           }
           
           ArrayAdapter<Entry> archivadapter = new ArrayAdapter<Entry>(StartActivity.this, android.R.layout.simple_list_item_1, Plaenearchiv);
           
        ListView archivlist = (ListView) findViewById(R.id.archivlistView);
                      
        archivlist.setAdapter(archivadapter);
              
      
        }
Das funktioniert auch.

Nun habe ich, wie schon erwähnt, das o.g. Tutorial versucht für meine App anzupassen und so sieht jetzt meine ArchivActivity aus.
Code:
package de.projekt.osdsave;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 


public class ArchivActivity extends Activity {
    
    private ListView lv;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_archiv);
        
        List<Entry> Plaenearchiv = new ArrayList<Entry>();
        
        ArrayAdapter<Entry> archivadapter = new ArrayAdapter<Entry>(this, android.R.layout.simple_list_item_1, Plaenearchiv);
           
                
        lv = (ListView) findViewById(R.id.archivlistView);
        lv.setAdapter(archivadapter);
        lv.setTextFilterEnabled(true);

        lv.setOnItemClickListener(new OnItemClickListener()
        {

        public void onItemClick(AdapterView<?> arg0, View v, int position, long id)  {
            
        AlertDialog.Builder adb = new AlertDialog.Builder(
        ArchivActivity.this);
        adb.setTitle("ListView OnClick");
        adb.setMessage("Selected Item is = "
        + lv.getItemAtPosition(position));
        adb.setPositiveButton("Ok", null);
        adb.show();                     
                                                        }
                                        });    
    
    
    }
    
}
Fehlermeldung gibt es keine. ABER ES FUNKTIONIERT AUCH NICHT. Bei einem Klick auf meine Listeneinträge erscheint kein Dialog.
Hat noch jemand einen Tipp für mich ?

Gruß Thomas

Der ursprüngliche Beitrag von 13:33 Uhr wurde um 14:31 Uhr ergänzt:

Ich muß noch mal ne Frage für mein Verständnis der Dinge nachwerfen.

Ich habe bereits in meiner StartActivity meine Datenbank mit einem Adapter mit dem ListView verbunden.

StartActivity
Code:
public void onClick(View v) {
        
           setContentView(R.layout.activity_archiv); // wechsel zur ArchivActivity
           mainisopen = false;
           
           Plaenearchiv.clear();
           try {
               datasource.open();
               Plaenearchiv = datasource.getAllEntries();
               datasource.close();
           }
           catch (Exception ex) {
               Toast.makeText(this, ex.toString(), Toast.LENGTH_SHORT).show();
           }
           
           ArrayAdapter<Entry> archivadapter = new ArrayAdapter<Entry>(StartActivity.this, android.R.layout.simple_list_item_1, Plaenearchiv);
           
        ListView archivlist = (ListView) findViewById(R.id.archivlistView);
                      
        archivlist.setAdapter(archivadapter);
              
      
        }
Das ListView befindet sich auf einer weiteren Activity namens ArchivActivity und zeigt die Daten an.

Muß ich jetzt, wenn ich in der ArchivActivity ein OnItemClick Ereignis für dieses ListView einbauen will nochmal die ganze Sache mit dem Adapter durchlaufen.
Würde mir nicht einleuchten.

Ich will doch nur das mein ListView auf einen Klick reagiert und einen Dialog anzeigt.

Ich habe dies so versucht.
Code:
public class ArchivActivity extends Activity {
    
    private ListView lv;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_archiv);
                   
                    
        lv = (ListView) findViewById(R.id.archivlistView);

        lv.setOnItemClickListener(new OnItemClickListener()
        {

        public void onItemClick(AdapterView<?> arg0, View v, int position, long id)  {
            
        AlertDialog.Builder adb = new AlertDialog.Builder(
        ArchivActivity.this);
        adb.setTitle("ListView OnClick");
        adb.setMessage("Selected Item is = "
        + lv.getItemAtPosition(position));
        adb.setPositiveButton("Ok", null);
        adb.show();                     
                                                        }
                                        });    
    
    }
Keine Fehlermeldung, aber auch kein Dialog beim anklicken. :blushing:
 
Ich blick ehrlich gesagt nicht ganz durch in deinem Code.
warum z.B. nutzt du setContentView nochmal in der Onblick methode?

Und hast du eine StartActivity und eine ArchivAcitivity?
Die rufst du aber nirgendwo auf. Irgendwie ist da ganz schön viel durcheinander.
 
  • Danke
Reaktionen: thomas_21
Du hast Recht. Ganz schön laienhaftes Durcheinander. Ich gehe wohl noch mal 3 Schritte zurück und schaue mir die Grundlagen noch mal an. Aber es wird schon besser.

Dein zweiter Hinweis hat mich aber auf die Lösung gebracht. Ich hatte einen grundsätzlichen Fehlgedanken bei meinem Überlegungen. Ich war fälschlicher Weise davon ausgegangen, dass ich für jede Activity zwangsläufig auch eine Hilfsklasse brauche, in die der Code für die Activity reingehört. Somit habe ich den Code immer in eine Klasse geschrieben, die ich letztendlich gar nicht aufgerufen habe. (siehe dein zweiter Hinweis). Ist mir fast schon ein bisschen peinlich.
Jetzt konnte ich den Code letztendlich da einfügen wo er hingehört und jetzt funktioniert auch mein Klick auf einzelne Listeneinträge. :thumbsup:

Viel wichtiger für mich ist, das ich weiteres hinzugelernt habe und die Lust am weitermachen nicht verloren habe. Kleine Anfängererfolge sind ja so wertvoll :winki:

Ich bedanke mich für die Geduld !
 

Ähnliche Themen

M
Antworten
21
Aufrufe
1.305
swa00
swa00
migi01
Antworten
26
Aufrufe
1.930
migi01
migi01
Zurück
Oben Unten