0

我在通过自定义适配器从数组填充的列表视图中使用不同的模板。我将项目添加到列表“项目”中,具体取决于列表视图中的位置,使用不同的模板。

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

如果我使用 adapter.notifyDataSetChanged(); textviews 中的文本未调整,可见屏幕之外的行也未设置/调整。我使用以下方法获取 View 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?

4

1 回答 1

0

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

于 2013-01-22T17:43:16.953 回答