Кастомный цвет в ListView

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
ivannatobedev
Сообщения: 30
Зарегистрирован: 03 дек 2014, 13:27

Кастомный цвет в ListView

Сообщение ivannatobedev » 25 фев 2015, 17:36

нужна помощь специалистов! у меня есть listView. Я ему программно задаю черный цвет. далее мне нужно, что бы динамически менялся цвет на белый или на черный у определенного элемента этого списка (по условию). результат - когда цвет у элемента должен стать белым, он становится темно-темно синим(почти черный, как изначально задано у listView).
Метод onCreate():

Код: Выделить всё

        currentStatusAdapter = new CurrentStatusAdapter(this, R.layout.current_status_listview_adapter, currentStatusData);
        listViewCurrentStatus = (ListView)findViewById(R.id.listViewCurrentStatus);
        listViewCurrentStatus.setBackgroundColor(getResources().getColor(R.color.black));
        listViewCurrentStatus.setAdapter(currentStatusAdapter);
        listViewCurrentStatus.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                @Override
                public void onItemClick(AdapterView<?> parent, View v, final int position, long id){
                    Toast.makeText(WorkTableActivity.this, "position " + position +1, Toast.LENGTH_SHORT).show();
                }
        });
Далее код метода getView у адаптера:

Код: Выделить всё

@Override
    public View getView(int position, View convertView, ViewGroup parent){
        row = convertView;
        StatusHolder holder = null;
        if(row==null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResoutceID, parent, false);
            holder = new StatusHolder();
            holder.textViewCurrentStatus = (TextView)row.findViewById(R.id.textViewCurrentStatus);
            row.setTag(holder);
        }
        else
        {
            holder = (StatusHolder)row.getTag();
        }
        CurrentStatus currentStatus = currentStatusData.get(position);
        holder.textViewCurrentStatus.setText(currentStatus.getCurrentStatus());

        if(holder.textViewCurrentStatus.getText().charAt(0) == '0')
        {
            holder.textViewCurrentStatus.setBackgroundColor(R.color.white);
            row.setBackgroundColor(R.color.white);
        }
        else
        {
            holder.textViewCurrentStatus.setBackgroundColor(R.color.black);
            row.setBackgroundColor(R.color.black);
         }

        return row;
    }
Активити адаптера:

Код: Выделить всё

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="current status"
        android:id="@+id/textViewCurrentStatus"
        android:textColor="@color/green"/>
</LinearLayout>
Активити listView:

Код: Выделить всё

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"

        android:layout_margin="1dp">

        <ListView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/listViewCurrentStatus"
            android:layout_weight="2"
            android:layout_marginBottom="2dp"

            android:divider="@color/green"
            android:dividerHeight="2dp"/>
p.s. можно предлагать даже самые бешеные варианты, т.к. все варианты которые придумал/нагуглил я - не сработали.

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Кастомный цвет в ListView

Сообщение alexmx » 25 фев 2015, 21:56

А в адаптере данные обновляются?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Кастомный цвет в ListView

Сообщение doter.ua » 25 фев 2015, 22:33

Можно подробнее про if(holder.textViewCurrentStatus.getText().charAt(0) == '0') зачем такая стремная проверка? нет возможности создать отдельную переменную под "тип"?
Пробовал принудительно ставить белый цвет всем элементам? может проблема в этом?
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
ivannatobedev
Сообщения: 30
Зарегистрирован: 03 дек 2014, 13:27

Re: Кастомный цвет в ListView

Сообщение ivannatobedev » 25 фев 2015, 23:06

alexmx писал(а):alexmx
да, данные динамические.
doter.ua писал(а):Можно подробнее про if(holder.textViewCurrentStatus.getText().charAt(0) == '0') зачем такая стремная проверка? нет возможности создать отдельную переменную под "тип"?
Пробовал принудительно ставить белый цвет всем элементам? может проблема в этом?
Иф срабатывает как надо, я дебажил. Я думаю проблема в том что цвет самого listView перекрывает цвет моего адаптера. но как решить это - хз(( палдня уже бьюсь

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Кастомный цвет в ListView

Сообщение klblk » 26 фев 2015, 05:57

0) Почему row объявлена за пределами метода getView()?
1) setBackgroundColor принимает на вход color, а вы ему пихаете id. И то и другое int, но смысл у этих int совершенно разный. Вам нужен метод getColor() или сделайте пару констант в адаптере для ваших цветов. Еще можно попробовать setBackgroundResource(), но я не знаю принимает ли он на вход цвет (тут как раз нужно передавать не цвет а id ресурса, т.е. R.color.my_color)

Аватара пользователя
ivannatobedev
Сообщения: 30
Зарегистрирован: 03 дек 2014, 13:27

Re: Кастомный цвет в ListView

Сообщение ivannatobedev » 26 фев 2015, 11:30

klblk писал(а):0) Почему row объявлена за пределами метода getView()?
1) setBackgroundColor принимает на вход color, а вы ему пихаете id. И то и другое int, но смысл у этих int совершенно разный. Вам нужен метод getColor() или сделайте пару констант в адаптере для ваших цветов. Еще можно попробовать setBackgroundResource(), но я не знаю принимает ли он на вход цвет (тут как раз нужно передавать не цвет а id ресурса, т.е. R.color.my_color)
0) - вернул как надо. Теперь row объявлена в getView().
1) - row.setBackgroundResource(R.color.white); => это сработало!!
Спасибо, за помощь!

upd: еще вот так можно менять цвет шрифта:

Код: Выделить всё

holder.textViewCurrentStatus.setTextColor(Color.YELLOW);

Ответить