2012-11-14 21 views
112

Ich bin neu in der Programmierung in Android und ich frage mich, wie kann ich eine Dropdown-Liste erstellen, habe ich eine ScrollView versucht, aber es ist nicht genau das, was ich brauche.Wie erstelle ich eine Drop-Down-Liste?

+6

Scheint, wie Sie für [Spinner] suchen (http://developer.android.com/guide/topics/ui/controls/spinner.html) –

Antwort

54

Spinner xml:

<Spinner 
     android:id="@+id/spinner" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" /> 

java:

public class MainActivity extends Activity implements OnItemSelectedListener{ 

    private Spinner spinner; 
    private static final String[]paths = {"item 1", "item 2", "item 3"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 

     spinner = (Spinner)findViewById(R.id.spinner); 
     ArrayAdapter<String>adapter = new ArrayAdapter<String>(MainActivity.this, 
       android.R.layout.simple_spinner_item,paths); 

     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(this); 

    } 

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { 

     switch (position) { 
      case 0: 
       // Whatever you want to happen when the first item gets selected 
       break; 
      case 1: 
       // Whatever you want to happen when the second item gets selected 
       break; 
      case 2: 
       // Whatever you want to happen when the thrid item gets selected 
       break; 

     } 
    } 

} 
+0

Große, gründliche Antwort! Vielen Dank! – 26hmkk

+0

Ich möchte mehrere Wert an Stelle von privaten statischen endgültigen String [] Wege = {"Element 1", "Element 2", "Element 3"}; Hilfe von PHP-Code, der Daten von meinem SQL nimmt Wie kann ich diesen Wert von mysql Server nehmen und Dynamisch und Admin machen Aktualisierbar Spinner –

184

Der beste Weg, es zu tun ist:

Vorschau:

enter image description here

XML:

<Spinner 
    android:id="@+id/spinner1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/btn_dropdown" 
    android:spinnerMode="dropdown"/> 

Java:

//get the spinner from the xml. 
Spinner dropdown = findViewById(R.id.spinner1); 
//create a list of items for the spinner. 
String[] items = new String[]{"1", "2", "three"}; 
//create an adapter to describe how the items are displayed, adapters are used in several places in android. 
//There are multiple variations of this, but this is the basic variant. 
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items); 
//set the spinners adapter to the previously created one. 
dropdown.setAdapter(adapter); 

Weitere Informationen:

Dies ist die Grundlagen, aber es gibt mehr zu sich selbst mit Experimentieren gelehrt werden.

https://developer.android.com/guide/topics/ui/controls/spinner.html

+1

Tayler verwenden Sie 'String-Array' mit statischen Werten, was ist, wenn Daten von' Web-Service' in die ' Spinner' (Drop-Down) '? Wie sollen wir das machen? –

+2

auf die gleiche Art und Weise, ich mache das auf meinen Apps. Erstellen Sie das Drehfeld, rufen Sie das Array vom Dienst ab, fügen Sie das Array zum Adapter hinzu und fügen Sie den Adapter zum Drehfeld hinzu. –

+1

this.getContext oder Sie erhalten einen Fehler –

5

Dieser Code ist workig gut für mich, hoffe, es Ihnen zu helfen.

item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="1dip" > 
    <TextView 
     android:id="@+id/spinnerItem" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="2dp" 
     android:textSize="12sp" > 
    </TextView> 
</RelativeLayout> 

details.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_marginBottom="20dp" 
     android:background="#FF00FF"> 
    <Spinner 
      android:id="@+id/dropStatus" 
      android:layout_width="250dp" 
      android:layout_height="30dp" 
      android:layout_marginBottom="7dp" 
      android:drawSelectorOnTop="true"/> 
</LinearLayout> 

Adapter Klasse:

import java.util.ArrayList; 

import android.content.Context; 
import android.content.res.Resources; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class StatusAdapter extends ArrayAdapter<StatusBean> { 

    private Context context; 
    private ArrayList<StatusBean> statuses; 
    public Resources res; 
    StatusBean currRowVal = null; 
    LayoutInflater inflater; 

    public StatusAdapter(Context context, 
      int textViewResourceId, ArrayList<StatusBean> statuses, 
      Resources resLocal) { 
     super(context, textViewResourceId, statuses); 
     this.context = context; 
     this.statuses = statuses; 
     this.res = resLocal;   
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return getCustomView(position, convertView, parent); 
    } 

    public View getCustomView(int position, View convertView, ViewGroup parent) { 
     View row = inflater.inflate(R.layout.status_item, parent, false); 
     currRowVal = null; 
     currRowVal = (StatusBean) statuses.get(position); 
     TextView label = (TextView) row.findViewById(R.id.spinnerItem); 
     if (position == 0) { 
      label.setText("Please select status"); 
     } else { 
      label.setText(currRowVal.getStatus()); 
     } 

     return row; 
    } 
} 

StatusBean Klasse:

public class StatusBean { 

    private String status; 
    private String statusCode; 

    public StatusBean() { 
    } 

    public StatusBean(String status, 
      String statusCode) { 
     this.status = status; 
     this.statusCode = statusCode; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getStatusCode() { 
     return statusCode; 
    } 

    public void setStatusCode(String statusCode) { 
     this.statusCode = statusCode; 
    } 
} 

Aktivitätsklasse:

Innen onCreate methos:

static ArrayList<StatusBean> STATUS_LIST = new ArrayList<StatusBean>(); 

for(int i=0;i<=10;i++) { 
STATUS_LIST.add(new StatusBean(“Status ”+i, “Stattus ”+i)); 
} 

final Spinner dropStatus = (Spinner)findViewById(R.id.dropStatus); 
      Resources res = getResources(); 
      StatusAdapter adapter = new StatusAdapter(this, R.layout.item, SessionData. STATUS_LIST, res); 
      dropStatus.setAdapter(adapter); 
+0

nur das komplette Beispiel hier ausfüllen +1 ... – ChenChi

27

enter image description here

Hier ist der Code für sie.

activity_main.xml

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

<Spinner 
    android:id="@+id/static_spinner" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dp" 
    android:layout_marginTop="20dp" /> 

<Spinner 
    android:id="@+id/dynamic_spinner" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

Saiten.

xml
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="app_name">Ahotbrew.com - Dropdown</string> 
<string-array name="brew_array"> 
    <item>Cappuccino</item> 
    <item>Espresso</item> 
    <item>Mocha</item> 
    <item>Caffè Americano</item> 
    <item>Cafe Zorro</item> 
</string-array> 

MainActivity

Spinner staticSpinner = (Spinner) findViewById(R.id.static_spinner); 

    // Create an ArrayAdapter using the string array and a default spinner 
    ArrayAdapter<CharSequence> staticAdapter = ArrayAdapter 
      .createFromResource(this, R.array.brew_array, 
        android.R.layout.simple_spinner_item); 

    // Specify the layout to use when the list of choices appears 
    staticAdapter 
      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Apply the adapter to the spinner 
    staticSpinner.setAdapter(staticAdapter); 

    Spinner dynamicSpinner = (Spinner) findViewById(R.id.dynamic_spinner); 

    String[] items = new String[] { "Chai Latte", "Green Tea", "Black Tea" }; 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, items); 

    dynamicSpinner.setAdapter(adapter); 

    dynamicSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, 
       int position, long id) { 
      Log.v("item", (String) parent.getItemAtPosition(position)); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 
     } 
    }); 

Dieses Beispiel stammt aus http://www.ahotbrew.com/android-dropdown-spinner-example/

0

Drop Down Menü als Spinnereien in Android bekannt. Und beste Führer ist-

http://developer.android.com/guide/topics/ui/controls/spinner.html

+0

Yup, reinige hier Beispiel. –

+0

Bitte geben Sie eine korrekte Antwort an. Und diese Antwort wird nicht mit so vielen Antworten oben helfen. – Edric

+0

nutzlose Antwort, es gibt andere Beispiele aus der Dokumentation entnommen –

5

Sie einen Spinner benötigen. Hier ist es ein Beispiel:

spinner_1 = (Spinner) findViewById(R.id.spinner1); 
    spinner_1.setOnItemSelectedListener(this); 
    List<String> list = new ArrayList<String>(); 
    list.add("RANJITH"); 
    list.add("ARUN"); 
    list.add("JEESMON"); 
    list.add("NISAM"); 
    list.add("SREEJITH"); 
    list.add("SANJAY"); 
    list.add("AKSHY"); 
    list.add("FIROZ"); 
    list.add("RAHUL"); 
    list.add("ARJUN"); 
    list.add("SAVIYO"); 
    list.add("VISHNU"); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner_1.setAdapter(adapter); 


    spinner_2 = (Spinner) findViewById(R.id.spinner_two); 
    spinner_2.setOnItemSelectedListener(this); 
    List<String> city = new ArrayList<String>(); 
    city.add("KASARGOD"); 
    city.add("KANNUR"); 
    city.add("THRISSUR"); 
    city.add("KOZHIKODE"); 
    city.add("TRIVANDRUM"); 
    city.add("ERNAMKULLAM"); 
    city.add("WAYANAD"); 
    city.add("PALAKKAD"); 
    city.add("ALAPUZHA"); 
    city.add("IDUKKI"); 
    city.add("KOTTAYAM"); 
    city.add("PATHANAMTHITTA"); 
    city.add("KOLLAM"); 
    city.add("MALAPPURAM"); 
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, city); 
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner_2.setAdapter(adapter2); 



@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, 
     long id) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "YOUR SELECTION IS : " + parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show(); 


} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 
    // TODO Auto-generated method stub 

} 
0

Sie können auch verwenden AppCompatSpinner widget:

<android.support.v7.widget.AppCompatSpinner 
    android:id="@+id/spinner_order_type" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:backgroundTint="@color/red"/> 

In Ihrer Aktivitätsklasse:

AppCompatSpinner spinOrderType = (AppCompatSpinner) findViewById(R.id.spinner_order_type); 
List<String> categories = new ArrayList<String>(); 
     categories.add(getString(R.string.label_table_order)); 
     categories.add(getString(R.string.label_take_away)); 

     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(mContext, 
       R.layout.layout_spinner_item, categories); 
     dataAdapter.setDropDownViewResource(R.layout.layout_spinner_item); 
     spinOrderType.setAdapter(dataAdapter); 
     spinOrderType.setSelection(0); 

     spinOrderType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long l) { 
       String item = parent.getItemAtPosition(position).toString(); 
       Log.d(TAG, item); 
      } 

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

      } 
     }); 

layout_spinner_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:gravity="left" 
    android:textSize="@dimen/text.size.large" 
    android:textColor="@color/text.link" 
    android:padding="@dimen/margin.3" />