java spinner默认选项_Spinner 选项可设置为不可选择

最近遇到的一个问题,有时候我们希望下拉列表的某几项是不可选择的。于是和一起的实习生讨论了一下最好找了一个比较简便的方式实现了这个效果。

1.效果图

0818b9ca8b590ca3270a3433284dd417.png

以上为效果图,灰色的选项无法点击。(各位看官请推荐一个简洁的录视频小软件)

2.自定义适配器

在自定义适配器中实现了主要功能

public class BankAdapter extends BaseAdapter {

private Context context;

private List> list;

public BankAdapter(Context context,List> list){

this.context=context;

this.list=list;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return list.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return null;

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

View view;

ViewHolder viewHolder;

if(convertView==null){

view=View.inflate(context, R.layout.bank_item, null);

viewHolder=new ViewHolder();

viewHolder.tv_bankname=(TextView)view.findViewById(R.id.tv_bankname);

view.setTag(viewHolder);

}else{

view=convertView;

viewHolder=(ViewHolder)view.getTag();

}

viewHolder.tv_bankname.setText(list.get(position).get("bankname"));

return view;

}

@Override

public View getDropDownView(int position,View convertView,ViewGroup parent){

View view;

ViewDropHolder viewDropHolder;

if(convertView==null){

view=View.inflate(context, R.layout.bank_dropdown_item, null);

viewDropHolder=new ViewDropHolder();

viewDropHolder.ll_drop_bankname=(LinearLayout)view.findViewById(R.id.ll_drop_bankname);

viewDropHolder.tv_drop_bankname=(TextView)view.findViewById(R.id.tv_drop_bankname);

view.setTag(viewDropHolder);

}else{

view=convertView;

viewDropHolder=(ViewDropHolder)view.getTag();

}

//为下拉列表中的每项设置文字内容,不设置话点击下拉列表显示不出字

viewDropHolder.tv_drop_bankname.setText(list.get(position).get("bankname"));

/**

* 标志位,0不可以点击,1可以点击

*/

String isClickable=list.get(position).get("isclickable");

if(isClickable.equals("0")){

//为0 该项不可以点击,显示为灰色

viewDropHolder.tv_drop_bankname.setTextColor(Color.GRAY);

viewDropHolder.ll_drop_bankname.setClickable(true);

viewDropHolder.tv_drop_bankname.setClickable(true);

}else{

//为1 该项可以点击,显示为黑色

viewDropHolder.tv_drop_bankname.setTextColor(Color.BLACK);

viewDropHolder.ll_drop_bankname.setClickable(false);

viewDropHolder.tv_drop_bankname.setClickable(false);

}

return view;

}

class ViewHolder{

TextView tv_bankname;

}

class ViewDropHolder{

LinearLayout ll_drop_bankname;

TextView tv_drop_bankname;

}

}

Spinner通常要设置两个布局,一个是布局决定是Spinner的风格,一个布局决定是点击Spinner显示出的下拉列表的风格。而在以上的代码中 getView方法返回的View就是用来显示Spinner的一个item,即Spinner的风格;而getDropDownView则返回下拉列表中的item,即Spinner下拉列表的风格。如果不重写getDropDownView方法,getDropDownView默认的返回值是getView的返回值。不能选择的项把布局中的TextView和LinearLayout设置为可点击的,反之设置为不可点击,可点击时点击事件被TexView和LinearLayou截获,导致了选择item无效。这里的布局文件都非常简单,都是线性布局中含有一个TextView,就不在这里贴出代码了。

3.主程序

package com.example.spinnertest;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.os.Bundle;

import android.app.Activity;

import android.widget.Spinner;

public class MainActivity extends Activity {

private Spinner sp_bank_list;

private List> list=new ArrayList>();

private String b="我的第";

private String c="银行卡";

private BankAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

setData();

}

public void initView(){

sp_bank_list=(Spinner)findViewById(R.id.sp_bank_list);

}

public void setData(){

for(int i=1;i<11;i++){

HashMap map=new HashMap();

map.put("bankname", b+Integer.toString(i)+c);

//0为银行卡不可选择;1为可选择

if(10%i>2){

map.put("isclickable", "0");

}else{

map.put("isclickable", "1");

}

list.add(map);

}

adapter=new BankAdapter(MainActivity.this, list);

sp_bank_list.setAdapter(adapter);

}

}

主程序也很简单,注意一定要有个标志位。

刚学Android的没多久,如果程序有什么可以改进的地方,还请大家留言告诉我,小弟不胜感激!

下面是源码下载地址:

源码点我



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值