Thursday, February 16, 2017

Tutrial Spinner dengan Class Object Android

Tutorial Spinner berdasarkan Custom Object Class

source from http://stackoverflow.com/questions/1625249/android-how-to-bind-spinner-to-custom-object-list

dalam tutorial ini saya akan mencoba membuat spinner yang berisi daftar provinsi.
Kebutuhan :

  • Class Provinsi
  • Class SpinProv
  • Class MainActivity

langsung saja yang pertama kita buat sebuah project baru dengan nama terserah (hehehe)
agar rapi buat package pada project anda dengan nama module lalu kita buat Class Provinsi pada package module

Provinsi.java


package com.android.k3ntoes.curl.module;

import org.json.JSONException;
import org.json.JSONObject;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * Created by mySimpus on 2/14/2017.
 */

public class Provinsi {
    private String kdProv;
    private String nmProv;

    public Provinsi() {
        this.kdProv = "";
        this.nmProv = "";
    }

    public void setKdProv(String kdProv) {
        this.kdProv = kdProv;
    }

    public void setNmProv(String nmProv) {
        this.nmProv = nmProv;
    }

    public String getNmProv() {
        return nmProv;
    }

    public String getKdProv() {
        return kdProv;
    }
}

selanjutnya buat package adapter lalu buat Class SpinProv didalamnya

SpinProv.java

package com.android.k3ntoes.curl.adapter;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.android.k3ntoes.curl.module.Provinsi;

/**
 * Created by mySimpus on 2/16/2017.
 */

public class SpinProv extends ArrayAdapter<Provinsi> {
    //deklarasi Context
    private Context context;
    //Custom Value for the spinner Provinsi
    private Provinsi[] values;

    public SpinProv(Context context, int textViewResourceId, Provinsi[] values) {
        super(context, textViewResourceId, values);
        this.context = context;
        this.values = values;
    }

    public int getCount() {
        return values.length;
    }

    public Provinsi getItem(int position) {
        return values[position];
    }

    public long getItemId(int position) {
        return position;
    }

    // And the "magic" goes here
    // This is for the "passive" state of the spinner

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // I created a dynamic TextView here, but you can reference your own  custom layout for each spinner item
        TextView label = new TextView(context);
        label.setTextColor(Color.BLACK);

        // Then you can get the current item using the values array (Users array) and the current position
        // You can NOW reference each method you has created in your bean object (User class)
        label.setText(values[position].getNmProv());

        // And finally return your dynamic (or custom) view for each spinner item
        return label;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
 //inisialisasi Textview dengan Variable label
        TextView label = new TextView(context);
 //mengisi label dengan nama provinsi
        label.setText(values[position].getNmProv());

        return label;
    }
}

dan yang terakhir kita edit MainActivity

MainActivity.java

package com.android.k3ntoes.curl;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.Toast;

import com.android.k3ntoes.curl.adapter.SpinProv;
import com.android.k3ntoes.curl.module.Provinsi;

public class Main4Activity extends Activity implements AdapterView.OnItemSelectedListener {
    // You spinner view
    private Spinner mySpinner;
    // Custom Spinner adapter (ArrayAdapter<Provinsi>)
    // You can define as a private to use it in the all class
    // This is the object that is going to do the "magic"
    private SpinProv adapter;

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

        // Create the Users array
        // You can get this retrieving from an external source
        Provinsi[] provinsis = new Provinsi[2];

        provinsis[0] = new Provinsi();
        provinsis[0].setKdProv("3301");
        provinsis[0].setNmProv("Cilacap");

        provinsis[1] = new Provinsi();
        provinsis[1].setKdProv("3302");
        provinsis[1].setNmProv("Banyumas");

        // Initialize the adapter sending the current context
        // Send the simple_spinner_item layout
        // And finally send the Users array (Your data)
        adapter = new SpinProv(Main4Activity.this,
                android.R.layout.simple_spinner_item,
                provinsis);
        mySpinner = (Spinner) findViewById(R.id.miSpinner);
        mySpinner.setAdapter(adapter); // Set the custom adapter to the spinner

        mySpinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // Here you get the current item (a Provinsi object) that is selected by its position
        Provinsi provinsi = adapter.getItem(position);
        // Here you can do the action you want to...
        Toast.makeText(
                getApplicationContext(),
                "kdProv: " + provinsi.getKdProv() + "\nnmProv: " + provinsi.getNmProv(),
                Toast.LENGTH_SHORT
        ).show();
    }

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

    }
}

Run Project

Taraaaaaaaa--------


No comments:

Post a Comment