使用自定义ListView适配器不填充屏幕外的视图

时间:2013-01-22 17:34:49

标签: android listview findviewbyid listview-adapter

我在listview中使用不同的模板,这些模板通过自定义适配器从数组中填充。 我正在向List'items'添加项目,具体取决于Listview中的位置,使用不同的模板。

我有两个相关的问题,因为我的方法没有返回正确的视图ID:

如果我使用adapter.notifyDataSetChanged(); textview中的文本不适用,但是可视屏幕外的行也没有设置/调整。我使用以下方法获取视图ID:

TextView getText() {

        if (title == null) {

            switch (templateId) {

            case ListViewAdapter.TPL_TITLE:

                title = (TextView) row.findViewById(R.id.titletitle);

                break;

            case ListViewAdapter.TPL_PAYMENT:

             title = (TextView) row.findViewById(R.id.titlepayment);

                break;

            }

        }

        return (title);

    }

在我的活动中,我有不同的ListItems(一个单独的类):

items.add(new ListItem(id, title, description, amount, date, template)); 

我填写清单:

        adapter = new ListViewAdapter(this, items);

        mainMenu = (ListView) findViewById(R.id.listview);

        mainMenu.setAdapter(adapter);

我有这个getView方法:

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

        templateId=getTemplateID(items.get(position).getType());

        View row = convertView;

        ListViewWrapper wrapper = null;

        if (row == null) {

            LayoutInflater inflater = activity.getLayoutInflater();

            row = inflater.inflate(R.layout.listviewtemplates, null);

            wrapper = new ListViewWrapper(row);

            row.setTag(wrapper);

        } else {

            wrapper = (ListViewWrapper) row.getTag();
        }

        wrapper.setTemplateId(templateId);

        wrapper.populateFrom(items.get(position));

        return (row);

    }       

在包装器中:

 public void populateFrom(ListItem r) {

            getText().setText(r.getTitle()); 


            if (templateId == ListViewAdapter.TPL_TITLE) {

            }

            if (templateId == ListViewAdapter.TPL_PAYMENT) {
                 getSubtext().setText(r.getDescription());
                 getAmount().setText(r.getAmount());
                 getDate().setText(r.getDate());
                         }            }

            setTemplate();

        }

希望这是可读的,任何人都能理解/认识我的问题。我想真正的问题是,如何获得每行返回正确的ViewID?

1 个答案:

答案 0 :(得分:0)

刚才意识到if(title == null){...}不起作用,删除它解决了问题