【问题标题】:getView() Called multiple times for same positiongetView() 多次调用同一位置
【发布时间】:2014-05-26 10:24:35
【问题描述】:

我正在尝试将文件数组的详细信息加载到 ListView...这里我的文件数组从数据库返回了 1 条记录。我正在将此数组加载到我的自定义 arrayAdapter..

问题:

CustomArrayAdapter getView() 方法调用 3 次以获得第 0 个位置

第一次 convertView 将为空

第二次 convertView 不为空

第三次 convertView 再次为空

这是我的代码,

ArrayList files = null;

            try {
                files = db.getRecords(tableName, null, Type LIKE '.txt' , null, null, null, null);
            } catch (Exception e) {
                e.printStackTrace();
            }

            /*** files.size() = 1 ***/

            infoAdt = new InfoAdapter(mContext, R.layout.custome_view, files);
            setListAdapter(infoAdt);

            public class InfoAdapter extends ArrayAdapter<Object>  {

        public InfoAdapter(Context context, int textViewResourceId, List<Object> objects) {
            super(context, textViewResourceId,objects);
        }

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

             if (convertView == null) {      

                 LayoutInflater inf = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                 convertView = inf.inflate (R.layout.custome_view, parent, false);      

                 ViewHolder viewHolder = new ViewHolder();
                 viewHolder.nameView = (TextView) convertView.findViewById(R.id.name);
                 viewHolder.typeView = (TextView) convertView.findViewById(R.id.type);
                 viewHolder.sizeView = (TextView) convertView.findViewById(R.id.size);

                 convertView.setTag(viewHolder);
             }

             ViewHolder holder = (ViewHolder) convertView.getTag();

            FileItem f = (FileItem) getItem(position);          

            String[] fileNameAndType= f.getFileName().split("\\.");

            holder.nameView.setText(fileNameAndType[0]);
            holder.typeView.setText(fileNameAndType[1]);

            return convertView;
        }
    }

    class ViewHolder{
        TextView nameView;
        TextView typeView;
        TextView sizeView;
    }

【问题讨论】:

    标签: android android-listview android-arrayadapter


    【解决方案1】:

    多次请求索引 0 视图是正常的。测量/布局需要它。

    您可以在getView() 中放置一个调试器断点,通过观察调用堆栈了解为什么适配器getView() 在每种情况下都被调用。

    确保您的 ListView 不在需要多次测量/布局传递的布局中,例如带有权重的 LinearLayout 或带有复杂约束的 RelativeLayout

    出于性能原因,让您的 getView() 尽快返回视图。

    【讨论】:

    • 这是一个旧帖子,我知道 :D 但是,为什么转换视图再次变为空,而它是在之前创建的?
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多