Android: доступ к TextView внутри дочернего элемента ExpandableListViewActivity - PullRequest
0 голосов
/ 10 мая 2011

Я использую ExpandableList через ExpandableListViewActivity.

Теперь я хотел бы изменить цвет текста определенного TextView внутри каждого ChildView.Я не хочу, чтобы все они были одинаковыми, скорее что-то вроде «ок» в зеленом и «ошибка» в красном и т. Д.

Я наткнулся на getExpandableListAdapter (). GetChildView (...), ноЯ не уверен, какими должны быть последние параметры (View convertView, ViewGroup parent).Также я не совсем знаю, нужно ли мне преобразовывать возвращаемое значение (View) во что-то?

TextView tv = (TextView)this.getExpandableListAdapter().getChildView(0, 0, false, ???, ???).findViewById(R.id.xlist_child_tv);

С уважением, медуза

Краткое описание решения

SimpleExpandableListAdapter expListAdapter = new SimpleExpandableListAdapter(...parameters...){
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
    {
        final View itemRenderer = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
        final TextView tv = (TextView) itemRenderer.findViewById(R.id.kd_child_value);

        if (tv.getText().toString().contentEquals(getString(R.string.true)))
        {
            tv.setTextColor(getResources().getColor(R.color.myred));
        }
        else if (tv.getText().toString().contentEquals(getString(R.string.false)))
        {
            tv.setTextColor(getResources().getColor(R.color.mygreen));
        }
        else
        {
            tv.setTextColor(getResources().getColor(R.color.white));
        }

        return itemRenderer;

    }
};

ресурс цвета:

<resources>
    <color name="white">#ffffffff</color>
    <color name="myred">#FFFF3523</color>
    <color name="mygreen">#FFA2CD5A</color>
</resources>

1 Ответ

2 голосов
/ 10 мая 2011

Вам следует переопределить метод getChildView вашей реализации ExpandableListAdapter, и внутри него установить цвет текста на основе любого флага, доступного для этого адаптера.

Если изменение явное, не забудьте вызвать notifyDatasetChanged() на адаптере после изменения флага!

Чтобы переопределить getChildView метод SimpleExpandableListAdapter, вам необходиморасширить его (здесь анонимно):

final SimpleExpandableListAdapter sa = new SimpleExpandableListAdapter(/*your list of parameters*/)
{
    @Override
    public View getChildView(int groupPosition, int childPosition, 
            boolean isLastChild, View convertView, ViewGroup parent)
    {
        final View itemRenderer = super.getChildView(groupPosition, 
                childPosition, isLastChild, convertView, parent);
        final TextView tv = (TextView)itemRenderer.findViewById(R.id.text);
        if (/*check whether the data at groupPosition:childPosition is correct*/)
            tv.setTextColor(getResources().getColor((R.color.green));
        else
            tv.setTextColor(getResources().getColor((R.color.red));
        return itemRenderer;
    }
};

Обновление Проблема с раскрашиванием заключается в вашем файле ресурсов, вам также нужно установить альфа-значение для цвета текста, поэтому ваш красный должен быть #FFFF3523, а зеленый: #FFA2CD5A:

<resources>
    <color name="white">#ffffffff</color>
    <color name="myred">#FFFF3523</color>
    <color name="mygreen">#FFA2CD5A</color>
</resources>
...