首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android微调器中隐藏一项

如何在Android微调器中隐藏一项
EN

Stack Overflow用户
提问于 2012-03-26 03:44:51
回答 9查看 57.7K关注 0票数 105

我正在寻找一种方法来隐藏一个项目在Android微调窗口小部件。这将允许您在没有选定项的情况下模拟微调器,并确保始终为选定的每个项调用onItemSelected()回调(如果隐藏项是“当前”项)。通常情况下,微调器中总有一项不会生成回调,即当前回调。

stackoverflow上有一些代码,说明了如何禁用(灰显)项,但没有说明如何完全隐藏项,就好像它们不存在一样。

经过多次试验,我想出了一个在各种新旧Android平台上都能工作的黑客解决方案。它有一些小的外观上的缺点,很难注意到。我仍然希望听到一个更正式的解决方案,而不是“不要用旋转器那样做”。

这总是隐藏微调器中的第一个项目,但可以很容易地扩展到隐藏任意项目或多个项目。在微调器项目列表的开头添加一个包含空字符串的虚拟项目。在微调器对话框打开之前,您可能希望将当前微调器选择设置为0项,这将模拟未选定的微调器。

使用ArrayAdapter方法覆盖的微调器设置示例:

代码语言:javascript
复制
List<String> list = new ArrayList<String>();
list.add("");   //  Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");

// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View v = null;

        // If this is the initial dummy entry, make it hidden
        if (position == 0) {
            TextView tv = new TextView(getContext());
            tv.setHeight(0);
            tv.setVisibility(View.GONE);
            v = tv;
        }
        else {
            // Pass convertView as null to prevent reuse of special case views
            v = super.getDropDownView(position, null, parent);
        }

        // Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling 
        parent.setVerticalScrollBarEnabled(false);
        return v;
    }
};

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9863378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档