Zwei Spinner in einer activity

  • Antworten:19
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 17:55:56 via Website

Ich versuche zwei Spinner auf einer Activity zum funktionieren zu bringen, finde nun aber den fehler nicht. Ich bekomme die Meldung

Attempted to finish an input event but the input event receiver has already been disposed.

Der zweite Spinner ist zuerst auf Invisble gesetzt und wird erst geladen wenn der erste spinner die Variablen mitgibt.

Ich bin noch ein bisschen verwirrt bezüglich

-android.R.id.text1
-simple_list_item_1

Muss ich da andere wählen also text2 ?? hab es versucht hat aber nicht funktioniert.

der Code des zweiten Spinners sieht volgendermassen aus

@SuppressWarnings("deprecation")
protected void loadSelected(CharSequence text) {
     Spinner glasListe1 = (Spinner)findViewById(R.id.ko_spinner2);
     TextView titelDicke = (TextView)findViewById(R.id.ko_textView3);
     TextView titelSicherheit = (TextView)findViewById(R.id.ko_textView2);
     RadioButton rNOO = (RadioButton)findViewById(R.id.ko_radio0);
     RadioButton rESG = (RadioButton)findViewById(R.id.ko_radio1);
     RadioButton rVSG = (RadioButton)findViewById(R.id.ko_radio2);
     RadioButton rTSG = (RadioButton)findViewById(R.id.ko_radio3); 


    final String[] back = {"id_produkt _id","typ","dicke"};
     final String db_name = "gd_glas";
     final String where ="id_lieferant = "+ sp.viewP("id_lieferant") + " AND titel = '"+ text +"'" ;
     final String order = null;
     final String group = "typ";
     final String limit = null;
     Cursor c = null;




     titelDicke.setVisibility(View.VISIBLE);
     titelSicherheit.setVisibility(View.VISIBLE);
     glasListe1.setVisibility(View.VISIBLE);


     db.open();
     c = db.whileQuery(db_name, back, where, order, group,
                limit);

     c.moveToFirst();
     for(int j=0;j<c.getCount();j++){
         if(c.getString(c.getColumnIndex("typ")).equals("Float")){
             rNOO.setVisibility(View.VISIBLE);
             rNOO.setChecked(true);
         }
         if(c.getString(c.getColumnIndex("typ")).equals("ESG")){
             rESG.setVisibility(View.VISIBLE);
             rESG.setChecked(false);
         }
         if(c.getString(c.getColumnIndex("typ")).equals("VSG")){
             rVSG.setVisibility(View.VISIBLE);
             rVSG.setChecked(false);
         }
         if(c.getString(c.getColumnIndex("typ")).equals("TSG")){
             rTSG.setVisibility(View.VISIBLE);
             rTSG.setChecked(false);
         }
         c.moveToNext();     
     }

     c.close();

     final String group1 = "dicke";
     Cursor c1 = null; 


     c1 = db.whileQuery(db_name, back, where, order, group1, limit);
     c1.moveToFirst();
     String[] cfn =c1.getColumnNames();
     for(int j = 0; j<c1.getCount();j++){
            for(int i = 0; i<c1.getColumnNames().length;i++){
                Log.i("cursor = ", "column = "+ cfn[i] + "/ entry = "+ c1.getString(c1.getColumnIndex(cfn[i])) );
            }
            c1.moveToNext();
     }
    SimpleCursorAdapter  spinadapter = new SimpleCursorAdapter(
             this,
             android.R.layout.simple_list_item_1,
             c1,
             new String[] { "dicke","_id"},
             new int[] {android.R.id.text1}
             );
    c1.moveToFirst();

     spinadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     glasListe1.setAdapter(spinadapter);
     glasListe1.setPrompt(this.getResources().getString(android.R.id.text1)); 
     glasListe1.setAdapter(spinadapter);

     /*glasListe.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
         boolean firsttime = true;  
         @Override 
           public void onItemSelected(AdapterView<?> arg0, View view, int position, long string) {
               if(firsttime){
                    firsttime = false;
                    //Just return some empty view

                }else{
                         //  Toast.makeText(getApplicationContext(),
                        //((TextView) view).getText(), Toast.LENGTH_SHORT).show();  

                }


           }

           @Override
           public void onNothingSelected(AdapterView<?> arg0) {
           }
        });*/


     c1.close();
     db.close();




     ///Toast.makeText(getApplicationContext(),text, Toast.LENGTH_SHORT).show();
}

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 18:29:20 via Website

nicht wirklich, was mir auffällt ist, das der simpleCursoraAdapter für ein ListView z.b. R.layout.listitemlayout verwendet anstatt simple_list_item_1...

und was wahrscheinlich am wesentlichsten ist, das es mit

    @Override
  public void onCreate(Bundle icicle)

geladen wird......... jedoch muss ich das irgendwie anders umsetzten da ich den spinner erst im nachhinein laden (füllen) will.....

— geändert am 05.07.2014, 18:29:31

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 18:34:44 via Website

also der erste Spinner funktioniert einwandfrei!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.07.2014, 18:35:01 via Website

Jap, listitemlayout ist eine XML Datei die im Ordner Layouts liegen sollte.
In dieser Definierst du als View eine ListView.
Simple list item_1 ist eine allgemene vom Systemdefinierte ListView.
Zudem macht das 2. mal setzen des Adapters keinen Sinn:

 glasListe1.setAdapter(spinadapter);
 glasListe1.setPrompt(this.getResources().getString(android.R.id.text1)); 
 glasListe1.setAdapter(spinadapter);

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 18:42:44 via Website

danke für die zwei Infos. Doch..... wieso funktioniert jetzt der zweite spinner nicht? und es kommt die Meldung

Attempted to finish an input event but the input event receiver has already been disposed.

Der erste funktioniert einwandfrei? an was kann das denn liegen?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.07.2014, 18:50:53 via Website

Wie sieht denn da dein Code aus.
Bisher hast du nur den vom erstenSpinner gepostet oder?
Kommt die Meldung in LogCat?
Wenn ja gibt es zeilenangeben etc?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 19:05:31 via Website

Nee. da war der Code des zweiten Spinners,

Ich habe soeeben versucht beide Spinner gleichzeitig zu laden, der erste hat wieder funtkioniert, der andere ging wieder leer aus, irgendetwas habe ich falsch gemacht ;) ich kopiere den ersten Code nochmal und versuche den zweiten Spinner erneut..... :(

Bei LogCat kommt nur die meldung

Attempted to finish an input event but the input event receiver has already been disposed.

— geändert am 05.07.2014, 19:06:14

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.07.2014, 19:22:12 via Website

Poste mal deinen kompletten Code d.h. spinner 1 + 2
Irgendwas scheint spinner1 zu schließen oder zu verwerfen sodass der 2. nicht mehr erstellt werden kann.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 19:28:28 via Website

ok..... :)

   Code wieder versteckt ;)

— geändert am 05.07.2014, 20:24:25

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.07.2014, 19:30:19 via Website

Sind die beiden Spinner auf deinem Layout (R.layout.ko_main) angelegt?, Text1 + text2 als Id kommt mir sehr wie ein Android Standart vor.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

05.07.2014, 19:32:43 via App

Ähm, ich hatte zwar noch nie so ein Problem, aber intuitiv würde ich mal den "event receiver" in eine Variable packen.
Ich habe mal gelesen, dass der durch den Garbage Collector abhanden kommen kann. Selber habe ich aber noch nicht getestet, ob das stimmt. :-)

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 19:33:47 via Website

yep ;) ich habe sie zuerst ko_spinner_1 und ko_spinner_2 genannt, jedoch ICH als totaler Quereinsteiger wusste zuert nicht was "android.R.id.text1" genau sollte ;).... und habe die ID's geändert... ....

Antworten
Sven R.
  • Forum-Beiträge: 1.904

05.07.2014, 19:39:33 via App

Funktioniert es denn jetzt?

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 19:41:26 via Website

schön währ es.... leider gehen mir die ansätze aus..... wenn ich ehrlich bin, dein vorschlag kapier ich nicht ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

05.07.2014, 19:47:47 via App

Den onItemSelectedListener packst du in eine finale Variable:
private final OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener(...);

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 19:54:44 via Website

also, ich hab es versucht, aber dann kommt ne fehlermeldung ??

Multiple markers at this line
- The method setOnItemSelectedListener(AdapterView.OnItemSelectedListener) in the type AdapterView<SpinnerAdapter> is not applicable for the 
 arguments ()
- Syntax error, insert ";" to complete Statement
- Illegal modifier for parameter onItemSelectedListener; only final is permitted
- Syntax error, insert ")" to complete MethodInvocation

Ausserdem habe ich den "setOnItemSelectedListener" einmal ausgetagt mit /* */ und leider keine änderung :(

Antworten
Sven R.
  • Forum-Beiträge: 1.904

05.07.2014, 20:03:42 via App

Also wenn du es auskommentiert hast, dann können wir ja den Listener ausschließen, obwohl ich wirklich dachte, daran lege es.
Ich weiß da nicht weiter

— geändert am 05.07.2014, 20:04:10

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

05.07.2014, 20:23:56 via Website

ok. ich konnte das problem lösen... leider weis ich nicht wie.... ich habe den gesamten Code Simple Cursor adapter erneut kopiert.

Ich habe das ganze in ein try/catch gepackt.... oder besser gesagt in 2 try/catch'es..... ich habe ja zwei mal auf die db zugegriffen....

Kann es sein das man die db jedesmal schliessen und erneut öffnen muss um eine nächste anfrage zu machen???? .. k.a.

Jedenfalls habe ich mein Ziel mit überstunden erreicht!!! vielein dank für eure bemühungen!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.07.2014, 20:32:07 via Website

Kein Problem.
Deswegen ist es besser seinen Code zu strukturieren z.b. eine Methode zum laden der DB und als Rückgabe ein Array oder ne Arraylist.
in einer Anderen Methode dann das schreiben des Array in einen Spinner.
So kann man sein Programm schritt für Schitt debuggen und man findet den Fehlr.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten