自定义适配器微调器无法显示所有值

Custom Adapter Spinner can not display all values

没有发现错误但是结果显示在微调器的值上是不完整的。我从 xml 中的字符串数组中获取微调器的值,这个例子:

<string-array name="digit">
  <item>1</item>
  <item>2</item>
  <item>3</item>
  <item>4</item>
  <item>5</item>
  <item>6</item>
  <item>7</item>
  <item>8</item>
  <item>9</item>
  <item>10</item>
  <item>11</item>
  <item>12</item>
  <item>13</item>
  <item>14</item>
  <item>15</item>
  <item>16</item>
  <item>17</item>
  <item>18</item>
  <item>19</item>
</string-array>

我得到的结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6

为什么出现的结果恢复了初始值? 请帮助检查错误,此示例脚本:

public class CustomAdapterSpinner extends BaseAdapter {
    private Context ctx;
    private LayoutInflater layoutInflater;
    private List<String> data;

    public CustomAdapterSpinner(Context context, List<String> data) {
        this.ctx = context;
        this.data = data;
        layoutInflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;

        if (view == null) {
            view = layoutInflater.inflate(R.layout.spinner_rows, parent, false);
            TextView textView = (TextView) view.findViewById(R.id.text1);
            ImageView imageView = (ImageView) view.findViewById(R.id.image1);
            imageView.getLayoutParams().height = 55;
            imageView.getLayoutParams().width = 55;
            imageView.setPadding(0, 10, 0, 10);

            textView.setText(data.get(position));
            textView.setPadding(10, 10, 0, 10);
            textView.setTypeface(null, Typeface.BOLD);
            textView.setTextSize(18);
            imageView.setImageResource(R.drawable.digit;

        return view;
    }

这是我放入 myfragment

List<String> listStrings = Arrays.asList(getResources().getStringArray(R.array.digit));
CustomAdapterSpinner adapter = new CustomAdapterSpinner (getActivity(), listStrings);
spinner.setAdapter(adapter);

请帮忙,非常感谢

利用视图持有者。

创建静态 class as

static class ViewHolder
{
    TextView textView;
    ImageView imageView;
}

在适配器 class 中添加此 class,因此它必须是内部 class。

然后按如下方式更改您的 getView() 方法。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (converView== null) {
        converView= layoutInflater.inflate(R.layout.spinner_rows, bull);
        viewHolder=new ViewHolder();
        viewHolder.textView = (TextView) view.findViewById(R.id.text1);
        viewHolder.imageView = (ImageView) view.findViewById(R.id.image1);
        viewHolder.imageView.getLayoutParams().height = 55;
        viewHolder.imageView.getLayoutParams().width = 55;
        viewHolder.imageView.setPadding(0, 10, 0, 10);


        viewHolder.textView.setPadding(10, 10, 0, 10);
        viewHolder.textView.setTypeface(null, Typeface.BOLD);
        viewHolder.textView.setTextSize(18);
        convertView.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolder) convertView.getTag();
    }
        viewHolder.textView.setText(data.get(position));
        imageView.setImageResource(R.drawable.digit;

      return convertView;
}

这是完全未经测试的代码。

希望对您有所帮助。