进入这两个if和else语句? [英] Entering both if AND else statement?

查看:237
本文介绍了进入这两个if和else语句?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有了这个code(更新解决方案)。

So I've got this code (updated for solution).

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ...
        final Direction d = directions.get(position);
        if (d != null) {

            TextView direction = (TextView) row.getTag(R.id.directionTextView);
            TextView departure1 = (TextView) row.getTag(R.id.departure1);
            TextView departure2 = (TextView) row.getTag(R.id.departure2);
            TextView departure3 = (TextView) row.getTag(R.id.departure3);

            direction.setText(d.getName());

            if (d.getTimeStamps().size() == 0) {
                departure1.setText(R.string.nodepartures);
                departure1.setTextColor(R.color.grey);
            } else {
                for (int i = 0; i < d.getTimeStamps().size(); i++) {
                    switch (i) {
                    case 0:
                        departure1.setText(d.getTimeStamps().get(i));
                        break;
                    case 1:
                        departure2.setText(d.getTimeStamps().get(i));
                        break;
                    case 2:
                        departure3.setText(d.getTimeStamps().get(i));
                        break;
                    default:
                        break;
                    }
                }
            }
        }
        return row;
    }
}

我遇到的问题是,当它是不应该的TextViews的人会变成灰色。我试图通过始终文本重新设置为黑色修复它,而是变成了灰色他们中的每一个。直到我尝试:

The problem I was having was that one of the TextViews would turn grey when it wasn't supposed to. I tried fixing it by always setting the text to black again, but that turned every single one of them grey. Until I tried:

setTextColor(context.getResources().getColor(R.color.black));

而不仅仅是

setTextColor(R.color.black);

不知道为什么,后者的作品设置文本灰白,但它就在那里。我想我只是有点迟钝。 :)

Don't know why the latter works when setting text grey, but there it is. I guess I'm just a little retarded. :)

推荐答案

AsLanFromNarnia是在正确的轨道上。 ListView的回收其子视图。你永远不能假定 convertView 是任何类型的默认状态为它的类型。每一次每一个设置相关领域 getView 被调用。在你的情况下,它是指设置文本颜色,当你设置的文本。

AsLanFromNarnia is on the right track. ListView recycles its child views. You can never assume that convertView is in any sort of default state for its type. Set every relevant field every time getView is called. In your case it means setting the text color when you set the text.

有另一种方式来处理,你想拥有异质列出这样的情况:使用视图类型。适配器可以返回你有类型的编号为 getViewTypeCount ,然后从 getItemViewType 报告每个项目的类型。如果你这样做,你总是会得到一个 convertView 传递到正确类型的 getView 方法,减轻需要每次更改,否则静态布局。

There is another way to handle cases like this where you want to have heterogenous lists: use view types. Your adapter can return the number of types you have for getViewTypeCount and then report the type of each item from getItemViewType. If you do this, you will always get a convertView passed into your getView method of the proper type, alleviating the need to change otherwise static layout each time.

这篇关于进入这两个if和else语句?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆