【问题标题】:How to implement getView when creating custom spinner创建自定义微调器时如何实现getView
【发布时间】:2017-07-19 08:52:10
【问题描述】:

我想要在下拉列表中有图像和 textView 的自定义微调器,所以我创建了不同的布局并对其进行了膨胀,它工作正常,但对于微调器的布局,在按下微调器之前我只想有一个文本,如“选择来自列表”,但是当我用

膨胀时

android.R.layout.simple_spinner_item

对于 getView,我只是得到一个下拉箭头而不是文本

如何在 getView 中填充布局,我必须创建新数据集吗?不同于下拉菜单?这是我的代码:我正在为自定义适配器实现 SpinnerAdapter

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

    convertView = inflater.inflate(R.layout.spinner_item, parent, false);
    ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
    TextView tv = (TextView) convertView.findViewById(R.id.tv1);

    iv.setImageResource(R.drawable.flower);
    tv.setText(itemList[position]);

    return convertView;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(android.R.layout.simple_spinner_item, 
                                  parent, false);

   return convertView;
}

【问题讨论】:

  • 您没有在getView() 中设置任何文本,是吗?
  • 不,怎么做,我必须创建单独的布局吗?

标签: java android adapter android-spinner


【解决方案1】:

在微调器适配器中声明 ViewHolder 类

private static class ViewHolder{
        TextView tv_itemname;
}

并像这样修改您的 getView() 方法:

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

        View vi = convertView;
        SpinnerListAdapter.ViewHolder holder;

        if(convertView==null){
            vi = inflater.inflate(R.layout.spinner_item_row, null);
            holder = new SpinnerListAdapter.ViewHolder();
            holder.tv_itemname = (TextView) vi.findViewById(R.id.tv_itemname);
            vi.setTag( holder );
        }
        else
        {
            holder = (SpinnerListAdapter.ViewHolder) vi.getTag();
        }


        if (position == 0)
        {
            holder.tv_itemname.setText("Choose one of the following category");
        }else{
            holder.tv_itemname.setText(itemList[position]);
        }

        return vi;
    }

【讨论】:

    【解决方案2】:

    text1android.R.layout.simple_spinner_itemTextView 的标识符

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = inflater.inflate(android.R.layout.simple_spinner_item, 
                                      parent, false);
    
        TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
    
        text1.setText(itemList[position]);
    
        return convertView;
    }
    

    【讨论】:

    • 你是怎么知道 text1 存在的?我还想显示 toast 显示我实现了 onItemSelectedListener 的所选项目,并得到了这样的 (String)spinner.getSelectedItem();但它是空的
    • @blackHawk 在 Android 中,text1(等等)通常是框架布局中TextView 的标识符。 (您可以搜索来源以找到它)。关于onItemSelected(),请贴出你的代码。
    • 发布了关于inItemSelected stackoverflow.com/questions/45188309/…的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2014-03-08
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多