【问题标题】:How to get the spinner id or tag from getDropDownView method in android如何从android中的getDropDownView方法获取微调器ID或标签
【发布时间】:2011-07-26 14:34:51
【问题描述】:

我有几个微调器,我为其创建了一个自定义 ArrayAdapter,因此我可以更改下拉菜单的外观。我想根据下拉列表所属的微调器来操纵视图。我以为我可以做类似 parent.getTag() 的事情,但它返回 null。

自定义数组适配器如下所示:

class BackgroundColorAdapter extends ArrayAdapter<String> {
    BackgroundColorAdapter() {
        super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textColors);
    }

    public View getDropDownView (int position, View convertView, ViewGroup parent){
        View row=super.getView(position, convertView, parent);
        if(parent.getTag().equals("background"){
            //Do custom stuff here
        }
        return(row);
    }
}

我正在设置标签:

settingsSpinner.setTag("bg_color_spinner");
settingsSpinner.setAdapter(new BackgroundColorAdapter());

我想我对视图层次结构的工作方式感到困惑,但微调器下拉列表的父级是微调器似乎是合乎逻辑的。有谁知道我如何在 getDropDownView 中找出下拉列表属于哪个微调器?

编辑:将 settingsSpinner 设为单个微调器,而不是一组微调器,以减少混乱

【问题讨论】:

    标签: android drop-down-menu spinner parent


    【解决方案1】:

    最终让它工作,这里是例如更改下拉菜单中每个项目的文本字体的代码。

    class TextSizeAdapter extends ArrayAdapter<String> {
    
            TextSizeAdapter() {
                super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textSizes);
            }
    
            public View getDropDownView (int position, View convertView, ViewGroup parent){
    
                View row=super.getView(position, convertView, parent);
                TextView text = (TextView)row.findViewById(R.id.item_text);
                text.setTextSize(TypedValue.COMPLEX_UNIT_PX,appState.FONTSIZES[position]);
                RadioButton radio = (RadioButton)row.findViewById(R.id.item_radio);
                if(settingsSpinners[2].getSelectedItemPosition() == position){
                    radio.setChecked(true);
                }else{
                    radio.setChecked(false);
                }
    
                return(row);
            }
        }
    

    【讨论】:

    • 感谢拯救我的一天
    【解决方案2】:

    我对 getDropDownView() 不熟悉,不知道你为什么要使用它。 getDropDownView() 的文档说明了有关父级的以下内容:

    parent此视图最终将附加到的父级

    这听起来不像您正在寻找的“父母”... 由于 getView() 调用中的“父级”确实是 Spinner,您可以使用它来存储父级的实例变量,如下所示:

    public Spinner mParent = null;
    
    public View getView (int position, View convertView, ViewGroup parent)
    {
        this.mParent = parent;
        return super.getView(position, convertView, parent);
    }
    
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {    // Your code here -> but use 'mParent'
    }
    

    我还没有尝试过,但也许这是一种解决方法来获得你需要的东西。如果您找到了解决方案,请告诉我。

    【讨论】:

    • 我正在使用 getDropDownView 因为我正在为微调器下拉菜单中的每个项目创建自定义视图。 getView() 对此不起作用。
    • 我改变了我的答案。是否可以发布一个我们可以运行的完整代码示例,以准确了解您的目标?谢谢
    • 这可能会起作用,但似乎因为我在 getDropDownView 中有父 ViewGroup,所以应该很容易找出微调器项目所属的微调器。否则在方法中包含父级有什么意义。我觉得我缺少的层次结构有一些明显的东西。如果我找不到更好的答案,我会将此标记为正确。谢谢 Entreco。
    • 确实,getDropDownView() 中的父对象是一个奇怪的对象,所以我也不知道它指的是什么。祝你好运!
    • 是的,我做到了。我会将其添加为新帖子。
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 1970-01-01
    • 2015-12-03
    • 2012-11-27
    • 2017-01-27
    相关资源
    最近更新 更多