Search code examples
javaandroidspinnerfill

How to use spinners in android?


I am new to android. I am trying to make simple unit converter. The layout contains EditText for input, two spinners (to and from), an ImageButton and EditText to display answer. I want to add values to spinners and when these values are selected i want to perform action.

My xml code:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" 
tools:context=".BitsBytes" >

<Spinner
    android:id="@+id/SpinnerFrom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignRight="@+id/inputvalue"
    android:layout_below="@+id/textView2"
    android:entries="@array/bitsbytesfrom"
    android:prompt="@string/from_prompt" />

<Spinner
    android:id="@+id/SpinnerTo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView3"
    android:layout_alignRight="@+id/SpinnerFrom"
    android:layout_below="@+id/textView3"
    android:entries="@array/bitsbytesto"
    android:prompt="@string/to_prompt" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/SpinnerFrom"
    android:layout_below="@+id/SpinnerFrom"
    android:layout_marginTop="16dp"
    android:text="To:"
    android:textColor="#000000"
    android:textSize="20dp" />

<TextView
    android:id="@+id/textView6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:text="Value: "
    android:textSize="20dp" />

<EditText
    android:id="@+id/inputvalue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView6"
    android:layout_alignBottom="@+id/textView6"
    android:layout_toRightOf="@+id/textView6"
    android:ems="10"
    android:hint="Enter value"
    android:inputType="numberDecimal" >

    <requestFocus />
</EditText>

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView6"
    android:layout_below="@+id/inputvalue"
    android:layout_marginTop="16dp"
    android:text="From:"
    android:textColor="#000000"
    android:textSize="20sp" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="19dp"
    android:text="Bits/Bytes Conversion"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textSize="25dp" />

<ImageButton
    android:id="@+id/convertButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/SpinnerTo"
    android:layout_centerHorizontal="true"
    android:background="#00000000"
    android:src="@drawable/btnconvert" 
    android:clickable="true"/>

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/answer"
    android:layout_centerHorizontal="true"
    android:text="Answer"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/answer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="28dp"
    android:ems="10"
    android:inputType="numberDecimal" />

</RelativeLayout>

My java code:

package com.easy.convert;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;

public class BitsBytes extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bitsbytes);

    ImageButton ib = (ImageButton) findViewById(R.id.convertButton);
    ib.setOnClickListener(new View.OnClickListener() {

                EditText etValue = (EditText) findViewById(R.id.inputvalue);
                Spinner spBitsBytesFrom = (Spinner) findViewById(R.id.SpinnerFrom);
                Spinner spBitsBytesTo = (Spinner) findViewById(R.id.SpinnerTo);
                String txtFromSpinner = spBitsBytesFrom.getSelectedItem().toString();
                String txtToSpinner = spBitsBytesTo.getSelectedItem().toString();
                TextView Answer = (TextView) findViewById(R.id.answer);

                public void onClick(View v)
                {

                    if (txtFromSpinner.equals("Bits") && txtToSpinner.equals("Bytes"))
                    {
                        Double value = Double.parseDouble(etValue.getText().toString());
                        Double answer = (double) 0;
                        answer = value/8;
                        String stringAnswer = Double.toString(answer);
                        Answer.setText(stringAnswer);
                    }

                }
            });

}
}

I am filling the spinners using string array. I am not able to figure out whats wrong in my code because there is no error in logcat.


Solution

  • Change this,

     (txtFromSpinner.equals("Bits") && txtToSpinner.equals("Bytes"))
    

    to

    if((txtFromSpinner.getSelectedItem().toString().equals("Bits")) && (txtToSpinner.getSelectedItem().toString().equals("Bytes")))
    

    this will get the text from the item selected in the spinner.