2012-11-14 22 views
112

Jestem nowy w programowaniu w systemie Android i zastanawiam się, jak mogę utworzyć listę rozwijaną, próbowałem ScrollView, ale nie jest to dokładnie to, czego potrzebuję.Jak utworzyć listę rozwijaną?

+6

Wygląda szukasz Spinner [] (http://developer.android.com/guide/topics/ui/controls/spinner.html) –

Odpowiedz

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

Wielkiego, gruntowna odpowiedź! Dzięki! – 26hmkk

+0

Chcę wywołać wiele wartości w miejscu prywatnych statycznych ostatecznych ciągów [] ścieżek = {"element 1", "element 2", "element 3"}; pomoc w pobieraniu danych php z mojego sql Jak mogę pobrać te wartości z serwera mysql i uczynić dynamicznym i administracyjnym Aktualizowalny spinner –

184

Najlepszym sposobem, aby to zrobić jest:

Preview:

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); 

Więcej informacji:

To jest podstawowe, ale jest bardziej być samoukiem z eksperymentów.

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

+1

Tayler używasz 'String array' z wartościami statycznymi, co jeśli dane pochodzą z' web service' na ' spinner' (drop down) '? Jak powinniśmy to zrobić? –

+2

w ten sam sposób, w rzeczywistości robię to w moich aplikacjach. Utwórz spinner, pobierz tablicę z usługi, dodaj tablicę do adaptera i dodaj adapter do spinnera. –

+1

this.getContext lub otrzymasz błąd –

5

Ten kod jest w porządku dla mnie ROBOCZA, nadzieję, że pomoże też.

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 klasa

<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:

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 klasa:

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; 
    } 
} 
klasa

aktywny:

Wewnątrz 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

tylko kompletny przykład tutaj +1 ... – ChenChi

27

enter image description here

Oto kod dla niego.

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" /> 

struny.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> 

główną działalność

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 
     } 
    }); 

Ten przykład jest z http://www.ahotbrew.com/android-dropdown-spinner-example/

0

rozwijanego menu są znane jako błystki w Androidzie. A najlepszym przewodnikiem jest-

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

+0

Tak, czysty przykład tutaj. –

+0

Proszę podać poprawną odpowiedź. Ta odpowiedź nie pomoże w tak wielu odpowiedziach powyżej. – Edric

+0

bezużyteczna odpowiedź, istnieją inne przykłady zaczerpnięte z dokumentacji –

5

Musisz Spinner. Tutaj jest przykład:

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

Można również użyć 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"/> 

Wewnątrz klasy aktywny:

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" /> 
Powiązane problemy