如何禁用Spinner中的项目

时间:2010-08-26 11:58:04

标签: android

是否可以将Spinner列表中的特定条目显示为已禁用?

也就是说,我想总是显示一个带有四个条目的微调器(例如,北,南,东和西),但我希望能够禁用其中任何一个,这样看起来是灰色的,不可选择。

这是可能的,还是我每次都要重新创建列表,而忽略了无效的条目?

5 个答案:

答案 0 :(得分:35)

   // Create spinner month, and disable month < today
    List<CharSequence> listMonth = new ArrayList<CharSequence>();
    for (int m = 0; m < 12; m++) {
        if (m < 9) {
            listMonth.add("0" + (m + 1));
        } else {
            listMonth.add("" + (m + 1));
        }
    }
        // Create spinner item
    adapterMonth = new ArrayAdapter<CharSequence>(this,
            R.layout.layout_spinner_item, listMonth) {
         // Disable click item < month current
        @Override
        public boolean isEnabled(int position) {
            // TODO Auto-generated method stub
            if (year <= max_year && position < max_month - 1) {
                return false;
            }
            return true;
        }
        // Change color item
        @Override
        public View getDropDownView(int position, View convertView,
                ViewGroup parent) {
            // TODO Auto-generated method stub
            View mView = super.getDropDownView(position, convertView, parent);
            TextView mTextView = (TextView) mView;
            if (year <= max_year && position < max_month - 1) {
                mTextView.setTextColor(Color.GRAY);
            } else {
                mTextView.setTextColor(Color.BLACK);
            }
            return mView;
        }
    };

    adapterMonth
            .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spn2.setAdapter(adapterMonth);

答案 1 :(得分:4)

有人刚刚发布了您问题的解决方案,请参阅此old post

答案 2 :(得分:4)

\

答案 3 :(得分:3)

  

这可能吗

它不会出现。您使用ListView执行此操作的方式涉及areAllItemsEnabled()isEnabled()。但是,这些是ListAdapter接口上的方法,而不是SpinnerAdapter接口。所以,我怀疑它们会被Spinner忽略。

答案 4 :(得分:0)

class SpinnerAdapter(context: Context, resource: Int, list: ArrayList<String>)
    : ArrayAdapter<String>(context, resource, list) {

        override fun isEnabled(position: Int): Boolean {
            // select position to disable 
            return position != 0
        }

}