Sunday, August 14, 2011

tutorial for spinner in android

/*

* Copyright (C) 2010 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/




package com.android.example.spinner;



import com.android.example.spinner.R;



import android.app.Activity;

import android.content.Context;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Spinner;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.AdapterView.OnItemSelectedListener;



/**

* Displays an Android spinner widget backed by data in an array. The

* array is loaded from the strings.xml resources file.

*/


public class SpinnerActivity extends Activity {



/**

* Fields to contain the current position and display contents of the spinner

*/


protected int mPos;

protected String mSelection;



/**

* ArrayAdapter connects the spinner widget to array-based data.

*/


protected ArrayAdapter<CharSequence> mAdapter;



/**

* The initial position of the spinner when it is first installed.

*/


public static final int DEFAULT_POSITION = 2;



/**

* The name of a properties file that stores the position and

* selection when the activity is not loaded.

*/


public static final String PREFERENCES_FILE = "SpinnerPrefs";



/**

* These values are used to read and write the properties file.

* PROPERTY_DELIMITER delimits the key and value in a Java properties file.

* The "marker" strings are used to write the properties into the file

*/


public static final String PROPERTY_DELIMITER = "=";



/**

* The key or label for "position" in the preferences file

*/


public static final String POSITION_KEY = "Position";



/**

* The key or label for "selection" in the preferences file

*/


public static final String SELECTION_KEY = "Selection";



public static final String POSITION_MARKER =

POSITION_KEY
+ PROPERTY_DELIMITER;



public static final String SELECTION_MARKER =

SELECTION_KEY
+ PROPERTY_DELIMITER;



/**

* Initializes the application and the activity.

* 1) Sets the view

* 2) Reads the spinner's backing data from the string resources file

* 3) Instantiates a callback listener for handling selection from the

* spinner

* Notice that this method includes code that can be uncommented to force

* tests to fail.

*

* This method overrides the default onCreate() method for an Activity.

*

* @see android.app.Activity#onCreate(android.os.Bundle)

*/


@Override

public void onCreate(Bundle savedInstanceState) {



/**

* derived classes that use onCreate() overrides must always call the super constructor

*/


super.onCreate(savedInstanceState);



setContentView
(R.layout.main);



Spinner spinner = (Spinner) findViewById(R.id.Spinner01);



/*

* Create a backing mLocalAdapter for the Spinner from a list of the

* planets. The list is defined by XML in the strings.xml file.

*/




this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,

android
.R.layout.simple_spinner_dropdown_item);



/*

* Attach the mLocalAdapter to the spinner.

*/




spinner
.setAdapter(this.mAdapter);



/*

* Create a listener that is triggered when Android detects the

* user has selected an item in the Spinner.

*/




OnItemSelectedListener spinnerListener = new myOnItemSelectedListener(this,this.mAdapter);



/*

* Attach the listener to the Spinner.

*/




spinner
.setOnItemSelectedListener(spinnerListener);





/*

* To demonstrate a failure in the preConditions test,

* uncomment the following line.

* The test will fail because the selection listener for the

* Spinner is not set.

*/


// spinner.setOnItemSelectedListener(null);



}





/**

* A callback listener that implements the

* {@link android.widget.AdapterView.OnItemSelectedListener} interface

* For views based on adapters, this interface defines the methods available

* when the user selects an item from the View.

*

*/


public class myOnItemSelectedListener implements OnItemSelectedListener {



/*

* provide local instances of the mLocalAdapter and the mLocalContext

*/




ArrayAdapter<CharSequence> mLocalAdapter;

Activity mLocalContext;



/**

* Constructor

* @param c - The activity that displays the Spinner.

* @param ad - The Adapter view that

* controls the Spinner.

* Instantiate a new listener object.

*/


public myOnItemSelectedListener(Activity c, ArrayAdapter<CharSequence> ad) {



this.mLocalContext = c;

this.mLocalAdapter = ad;



}



/**

* When the user selects an item in the spinner, this method is invoked by the callback

* chain. Android calls the item selected listener for the spinner, which invokes the

* onItemSelected method.

*

* @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(

* android.widget.AdapterView, android.view.View, int, long)

* @param parent - the AdapterView for this listener

* @param v - the View for this listener

* @param pos - the 0-based position of the selection in the mLocalAdapter

* @param row - the 0-based row number of the selection in the View

*/


public void onItemSelected(AdapterView parent, View v, int pos, long row) {



SpinnerActivity.this.mPos = pos;

SpinnerActivity.this.mSelection = parent.getItemAtPosition(pos).toString();

/*

* Set the value of the text field in the UI

*/


TextView resultText = (TextView)findViewById(R.id.SpinnerResult);

resultText
.setText(SpinnerActivity.this.mSelection);

}



/**

* The definition of OnItemSelectedListener requires an override

* of onNothingSelected(), even though this implementation does not use it.

* @param parent - The View for this Listener

*/


public void onNothingSelected(AdapterView parent) {



// do nothing



}

}



/**

* Restores the current state of the spinner (which item is selected, and the value

* of that item).

* Since onResume() is always called when an Activity is starting, even if it is re-displaying

* after being hidden, it is the best place to restore state.

*

* Attempts to read the state from a preferences file. If this read fails,

* assume it was just installed, so do an initialization. Regardless, change the

* state of the spinner to be the previous position.

*

* @see android.app.Activity#onResume()

*/


@Override

public void onResume() {



/*

* an override to onResume() must call the super constructor first.

*/




super.onResume();



/*

* Try to read the preferences file. If not found, set the state to the desired initial

* values.

*/




if (!readInstanceState(this)) setInitialState();



/*

* Set the spinner to the current state.

*/




Spinner restoreSpinner = (Spinner)findViewById(R.id.Spinner01);

restoreSpinner
.setSelection(getSpinnerPosition());



}



/**

* Store the current state of the spinner (which item is selected, and the value of that item).

* Since onPause() is always called when an Activity is about to be hidden, even if it is about

* to be destroyed, it is the best place to save state.

*

* Attempt to write the state to the preferences file. If this fails, notify the user.

*

* @see android.app.Activity#onPause()

*/


@Override

public void onPause() {



/*

* an override to onPause() must call the super constructor first.

*/




super.onPause();



/*

* Save the state to the preferences file. If it fails, display a Toast, noting the failure.

*/




if (!writeInstanceState(this)) {

Toast.makeText(this,

"Failed to write state!", Toast.LENGTH_LONG).show();

}

}



/**

* Sets the initial state of the spinner when the application is first run.

*/


public void setInitialState() {



this.mPos = DEFAULT_POSITION;



}



/**

* Read the previous state of the spinner from the preferences file

* @param c - The Activity's Context

*/


public boolean readInstanceState(Context c) {



/*

* The preferences are stored in a SharedPreferences file. The abstract implementation of

* SharedPreferences is a "file" containing a hashmap. All instances of an application

* share the same instance of this file, which means that all instances of an application

* share the same preference settings.

*/




/*

* Get the SharedPreferences object for this application

*/




SharedPreferences p = c.getSharedPreferences(PREFERENCES_FILE, MODE_WORLD_READABLE);

/*

* Get the position and value of the spinner from the file, or a default value if the

* key-value pair does not exist.

*/


this.mPos = p.getInt(POSITION_KEY, SpinnerActivity.DEFAULT_POSITION);

this.mSelection = p.getString(SELECTION_KEY, "");



/*

* SharedPreferences doesn't fail if the code tries to get a non-existent key. The

* most straightforward way to indicate success is to return the results of a test that

* SharedPreferences contained the position key.

*/




return (p.contains(POSITION_KEY));



}



/**

* Write the application's current state to a properties repository.

* @param c - The Activity's Context

*

*/


public boolean writeInstanceState(Context c) {



/*

* Get the SharedPreferences object for this application

*/




SharedPreferences p =

c
.getSharedPreferences(SpinnerActivity.PREFERENCES_FILE, MODE_WORLD_READABLE);



/*

* Get the editor for this object. The editor interface abstracts the implementation of

* updating the SharedPreferences object.

*/




SharedPreferences.Editor e = p.edit();



/*

* Write the keys and values to the Editor

*/




e
.putInt(POSITION_KEY, this.mPos);

e
.putString(SELECTION_KEY, this.mSelection);



/*

* Commit the changes. Return the result of the commit. The commit fails if Android

* failed to commit the changes to persistent storage.

*/




return (e.commit());



}



public int getSpinnerPosition() {

return this.mPos;

}



public void setSpinnerPosition(int pos) {

this.mPos = pos;

}



public String getSpinnerSelection() {

return this.mSelection;

}



public void setSpinnerSelection(String selection) {

this.mSelection = selection;

}

}

No comments:

Post a Comment