2016-04-19 15 views
2

Ich habe eine Spinner und ich bevölkere es mit benutzerdefinierten SimpleCursorAdapter. Spinner Artikel Layout enthält zwei TextView s, One TextView für Artikel-ID und es ist nicht sichtbar, andere ist für den Artikelnamen. Ich möchte diese Item-ID auf Button Click Event bekommen und dann in die Sqlite-Datenbank einfügen. Ich erhalte die ID auf setOnItemSelectedListener von Spinner alsAndroid: Get Textview Wert von Spinner auf Button klicken

companySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       // Get selected row data to show on screen 
       String companyId = ((TextView) view.findViewById(R.id.spinnerItemIdTv)).getText().toString(); 
       Toast.makeText(getActivity(), companyId, Toast.LENGTH_LONG).show(); 
       Log.w(TAG, "companyId:" + companyId); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 


      } 
     }); 

und Spinner Artikel-Layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/spinnerItemIdTv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#888" 
     android:textSize="20sp" 
     android:visibility="gone"/> 

    <TextView 
     android:id="@+id/spinnerItemNameTv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#888" 
     android:textSize="20sp" /> 

</LinearLayout> 

Aber konnte sie nicht auf den Knopf klicken machen. Jede Hilfe wäre willkommen.

+0

Warum verwenden Sie nicht Tag in textview anstatt separate textview für ID? –

+0

Auf welche Schaltfläche klickst du? Wirst du es klarstellen? –

+0

@Revolution was meinst du mit Tag? Ich bin ein Android-Noob – Tartar

Antwort

2

Ich glaube, Sie für dieses Ereignis click

View selectedView = null; //Declare it as a class level variable so that you don't need to make it final 

spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      selectedView = view; 
     } 
     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

Und in einigen Schaltflächen suchen, tun wie diese

btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) {  
       if(selectedView!=null){       
        String companyId = ((TextView) selectedView.findViewById(R.id.spinnerItemIdTv)).getText().toString(); 
       } 
       else{//Something}  

      } 
     }); 
+0

Das funktioniert, danke. Aber denken Sie, dass es eine bessere Lösung für die Implementierung eines Schlüssel/Wert-Spinner wie HTML Dropdown gibt? – Tartar

+0

@Tartar Bro Es tut mir leid, dass ich mit benutzerdefinierten Dropdown oder HTML Dropdown nicht so vertraut bin. Und noch etwas zu beachten ist, dass Sie 'selectedView' in' onNothingSelected' wieder auf null setzen können. –

+0

Ich verstehe, danke für Ihre Antwort, es ist wirklich hilfreich. – Tartar

-1

Ändern Sie Ihre xml in einzelne TextView und verwenden Sie tag für ID.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/spinnerItemNameTv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:tag="yourId" 
     android:textColor="#888" 
     android:textSize="20sp" /> 

</LinearLayout> 

Jetzt setText verwenden, um die Spinner Zeilenwert zu setzen und verwenden setTag die ID der Zeile zu setzen und dann die ID wie diese erhalten.

+0

Bro ich denke du hast meine Frage nicht gelesen. Ich mache das bereits, indem ich entweder das Tag verwende oder nicht. Das ist nicht der Punkt. Point erhält den Wert des Button-Klick-Ereignisses. – Tartar

+0

Nein, ich kann nicht, da ich schon tun kann, was Sie gepostet haben. Trotzdem danke. – Tartar

+0

Die Lösung von @Shree Krishna & Tag mit einzelnen TextView verwendet wird flexibler sein. –

0

Sie haben Adapter mit Ihrem Spinner verbunden und ich nehme an, Sie haben einige Datenstruktur mit Adapter verbunden. Sie können Sie onItemSelected (so etwas wie unten)

public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
    myData = myArrayList.get(i); 
//OR 
    myData = myAdapter.getItem(i); 
} 

myData benötigen, können Tätigkeitsfeld erhalten Daten und Sie können später mit dem Knopf assosiated onClick Rückruf verwenden.

0

Sie können versuchen, diese

companySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      Spinner spinComp = (Spinner) view.findViewById(R.id.spinner_company); 
      int selCompIndex = spinComp .getSelectedItemPosition(); 
      String compID = companyList.get(selCompIndex).toString(); 
      Toast.makeText(getActivity(), compID, Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 


     } 
    }); 

Wo, companyList sind ArrayList, die Sie an Spinner Adapter übergeben. Hoffe, das funktioniert.

Verwandte Themen