Inne działy

 

Android Spinner - Lista rozwijalna

 

W tym przykładzie pokażemy, jak pracować z listą rozwijaną zwaną Spinner w androidzie. Listy rozwijalne (Spinners) służą do wyboru jednej wartości z danego zbioru kilku wartości. Stworzymy element Spinner zależny tj. drugą listę rozwijalną gdzie wyświetlana zawartość zależy od wartości wybranej w pierwszej liście rozwijalnej.

W tej przykładowej aplikacji będziemy mieli dwie kontrolki spinner jedną do wyboru kraju i drugą do wyboru miasta. W zależności od kraju wybranego w pierwszej kontrolce spinner zostaną wyświetlone miasta w drugiej kontrolce spinner.

 

Projekt wykonany w AndroidStudio

Zacznijmy:

Stwórzmy nowy projekt wybierając File -> New Project… Pozostaw domyślne nazwy plików dla głównej aktywności MainActivity.java i plik wyglądu activity_main.xml.

 

Po utworzeniu projektu należy dodać dane z listą elementów, które będą dodane do kontrolek spinner w pliku strings.xml w folderze res/values

 

strings.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">AndroidSpinner</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>

    <string-array name="kraje">
        <item>Polska</item>
        <item>Niemcy</item>
        <item>Francja</item>
    </string-array>

    <string-array name="maiasta_polska">
        <item>Warszawa</item>
        <item>Kraków</item>
        <item>Poznań</item>
    </string-array>

    <string-array name="miasta_niemcy">
        <item>Berlin</item>
        <item>Monachium</item>
        <item>Hamburg</item>
    </string-array>

    <string-array name="miasta_francja">
        <item>Paryż</item>
        <item>Marsylia</item>
        <item>Brest</item>
    </string-array>

</resources>

 

Teraz zaprojektuj interfejs graficzny składający się z kontrolki TextView i dwóch kontrolek Spinners, do których przypiszemy dane z pliku strings.xml

activity_main.xml:

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="pl.uazz.androidspinner.app.MainActivity">

    <TextView
        android:id="@+id/textView"
        android:text="Wybierz kraj i miasto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        android:gravity="center"
        android:textSize="15dp"/>

    <Spinner
        android:id="@+id/spinnerKraj"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="28dp"
        android:entries="@array/kraje">

        </Spinner>

    <Spinner
        android:id="@+id/spinnerMiasta"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/spinnerKraj"
        android:layout_below="@id/spinnerKraj"
        android:layout_marginTop="42dp"
        android:entries="@array/maiasta_polska">

        </Spinner>

</RelativeLayout>

Teraz w pliku Activity będzie utworzona instancja list rozwijalnych i będziemy zmieniać dane źródłowe dla drugiej kontrolki spinner(miasta) w zależności od wartości wybranej w pierwszej kontrolce spinner(kraje). Odbywa się to w metodzie wywołania zwrotnego onItemSelected pierwszej kontrolki.

MainActivity.java:

 

package pl.uazz.androidspinner.app;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;


public class MainActivity extends ActionBarActivity implements OnItemSelectedListener {

    //deklaracja zmiennych
    Spinner spinnerKraj, spinnerMiasto;

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

        spinnerKraj = (Spinner)findViewById(R.id.spinnerKraj);
        spinnerMiasto = (Spinner)findViewById(R.id.spinnerMiasta);
        spinnerKraj.setOnItemSelectedListener(this);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View arg1, int pos, long arg3){
        parent.getItemAtPosition(pos);
        if (pos == 0){
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.maiasta_polska,R.layout.support_simple_spinner_dropdown_item);
            spinnerMiasto.setAdapter(adapter);
        } else if(pos == 1){
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.miasta_niemcy,R.layout.support_simple_spinner_dropdown_item);
            spinnerMiasto.setAdapter(adapter);
        } else if (pos == 2){
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.miasta_francja,R.layout.support_simple_spinner_dropdown_item);
            spinnerMiasto.setAdapter(adapter);
        }
    }

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

Uruchom aplikacje i przetestuj jej działanie.

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.