widget(4、spinner)

Spinner 是android下的一个下拉框控件,可以支持多级,通常定义如下:

<Spinner

     android:id="@+id/spinner1"

     android:layout_width="match_parent"

     android:layout_height="wrap_content" />

Spinner与ListView类似,都是采用适配器的方法关联数据,例如:

//定义一个数据

buffer = new ArrayList<String>();

buffer.add("条目1");

buffer.add("条目2");

buffer.add("条目3");

定义一个适配器,这里采用基本适配器,默认实现四个方法,如下:

private BaseAdapter adapter = new BaseAdapter(){



    @Override

    public int getCount() {            

        return buffer.size();//数据大小

    }



    @Override

    public Object getItem(int arg0) {

        return buffer.get(arg0);//某一个位置的数据,对应一个item

    }



    @Override

    public long getItemId(int position) {

        return position;

    }



    @Override

    public View getView(int position, View convertView, ViewGroup parent) { //绘制展示部分

        LinearLayout ll = new LinearLayout(MainActivity.this);

        ll.setOrientation(LinearLayout.HORIZONTAL);

        TextView tv     = new TextView(MainActivity.this);

        tv.setText(buffer.get(position));

        ll.addView(tv);

        return ll;

    }        

};

之后配置适配器:

spinner.setAdapter(adapter);

在Spinner中有两个常用API:

  • 一个是某一个Item 被选中的事件
@Override

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

    LinearLayout ll = (LinearLayout) arg1;

    TextView tv      = (TextView) ll.getChildAt(0);

    Toast toast = new Toast(MainActivity.this);

    toast = Toast.makeText(getApplicationContext(),

     tv.getText(), Toast.LENGTH_SHORT);

    toast.show();

}

 

此处:arg0对应position,arg3对应id(即adapter里getItemId的值,而非视图ID)

  • 数据刷新时更新视图
buffer.add("条目4");

buffer.add("条目5");

adapter.notifyDataSetChanged();//触发更新视图控件

 

你可能感兴趣的:(Spinner)