Android基本控件Spinner的简单使用

        学习过了Textview,EditText,ImageView,Button 等简单View控件后,刚一看Spinner感觉有些复杂。显示数据还需要用Adapter。。。认真学习后做简单梳理 :

 


        上面两个图介绍了Spinner显示数据的过程。是MVC模式。Spinner负责显示,Adapter负责将源数据传送到Spinner,Model存放源数据,通常是List<?>集合或者数组。

看实际使用的例子

1.准备需要加载展示的数据源。我定义在了values\Strings.xml中,代码如下:

<resources>
    <string name="app_name">LoginDemo</string>
    <string-array name="log_method">
        <item>QQ登陆</item>
        <item>微信登陆</item>
        <item>手机号登陆</item>
        <item>微博登陆</item>
    </string-array>
</resources>

2.初始化适配器,将数据源加载到适配器中。new 一个适配器是有三个参数,了解一下含义:

context: 上下文对象,当前类.this。resource:表示列表item的布局资源id 默认android.R.layout.simple_spinner_item,logmethod。object:要适配的数据资源。

3.将适配器加载到控件中:

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.TextView;
import android.widget.Toast;

public class LoginActivity extends Activity {
    private Spinner mSp1;
    private String [] logmethod;
    private ArrayAdapter<String> adapter;
    private TextView mTv1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        mSp1 = (Spinner)this.findViewById(R.id.sp);
        mTv1 = (TextView) this.findViewById(R.id.tv);
        //准备要加载的字符串数组资源
        logmethod = getResources().getStringArray(R.array.log_method);
        /*
        * 初始化适配器时各参数
        * context: 上下文对象,当前类.this
        * resource:表示列表item的布局资源id 默认android.R.layout.simple_spinner_item,logmethod
        * object:要适配的数据资源
        * */
        adapter = new ArrayAdapter<String>(LoginActivity.this,android.R.layout.simple_spinner_item,logmethod);
        mSp1.setAdapter(adapter);
        mSp1.setOnItemSelectedListener(new OnItemSelectedListener() {
            /*
            参数详解:
            AdapterView<?> adapterView:触发当前事件的Spinner对象
            View view表示当前备选中的item
            int i:表示当前被选中item的下表
            long l:表示当前被选中item的id
             */

            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                String s1 = logmethod[position]; //在数据源中获取
                String s2 = adapter.getItem(position); //在适配器中获取
                Toast.makeText(LoginActivity.this,"s1 = "+s1,Toast.LENGTH_LONG);
                mTv1.setText(s1);
            }

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

Spinner的定义:

<Spinner
            android:id="@+id/sp"
            android:layout_marginLeft="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ></Spinner>

程序运行效果:




猜你喜欢

转载自blog.csdn.net/bingocoder/article/details/80469939