【问题标题】:Custom Adapter Spinner can not display all values自定义适配器微调器无法显示所有值
【发布时间】:2015-01-26 09:46:38
【问题描述】:

没有发现错误但结果显示在微调器的值不完整。我从 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;
    }

我把这个放在我的片段中

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

请帮忙,非常感谢

【问题讨论】:

  • 试试这个CustomAdapterSpinner adapter = new CustomAdapterSpinner (yourActivity.this, listStrings);
  • 抱歉,我的问题已经更新。我的意思不是活动,而是片段
  • @Ashadi 你能试试这个吗,请删除覆盖getItemId(),我觉得很可疑:)

标签: android arrays custom-adapter


【解决方案1】:

利用视图持有者。

创建一个静态类

static class ViewHolder
{
    TextView textView;
    ImageView imageView;
}

在适配器类中添加这个类,所以它必须是一个内部类。

然后按如下方式更改您的 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;
}

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

希望这会有所帮助。

【讨论】:

  • 这项工作并感谢@EagleEye,我从没想过制作静态类
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多