Как сделать так, чтобы строка в listView всегда имела одинаковый цвет android - PullRequest
0 голосов
/ 06 августа 2020

У меня есть CustomListView:

public class CustomView extends View {

    private String[] hoursList = getResources().getStringArray(R.array.hours); ;
    private String[] minutesList = getResources().getStringArray(R.array.minutes);;
    private ListView listView;
    private HourAdapter hourAdapter;
    private MinuteAdapter minuteAdapter;
 
    public CustomView(Context context) {
        super(context);
    }

    public CustomView(Context context, ViewGroup viewGroup) {
        super(context);
        inflate(context, R.layout.time_picker_test, viewGroup);

        listView = viewGroup.findViewById(R.id.minutes_list);
        minuteAdapter = new MinuteAdapter(context, minutesList);
        listView.setAdapter(minuteAdapter);

        listView = viewGroup.findViewById(R.id.hours_list);
        hourAdapter = new HourAdapter(context, hoursList);
        listView.setAdapter(hourAdapter);

    }
}

и классы адаптеров:

public class MinuteAdapter extends BaseAdapter {
    private LayoutInflater lInflater;
    private String[] minutesValueList;

    public MinuteAdapter(Context context, String[] minutesValueList) {
        lInflater = LayoutInflater.from(context);
        this.minutesValueList = minutesValueList;
    }

    @Override
    public int getCount() {
        return minutesValueList.length;
    }

    @Override
    public Object getItem(int position) {
        return minutesValueList[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.row, parent, false);

         TextView textMinutes = view.findViewById(R.id.textRow);
         textMinutes.setText(minutesValueList[position]);

        }

        if (view.getVisibility() == View.VISIBLE) {
            if (position ==2) {
                view.setBackgroundColor(Color.BLUE);
            } else {
                view.setBackgroundColor(Color.WHITE);
            }
        }
        TextView textMinutes = view.findViewById(R.id.textRow);
        textMinutes.setText(minutesValueList[position]);
        return view;
    }
}

Мне нужно, чтобы здесь (см. Рисунок) в среднем положении (где сейчас 11,2 и PM ) всегда был СИНИМ цветом (независимо от того, какой элемент в данный момент находится в этой позиции). Я использовал это:

if (view.getVisibility() == View.VISIBLE) {
                if (position ==2) {
                    view.setBackgroundColor(Color.BLUE);
                } else {
                    view.setBackgroundColor(Color.WHITE);
                }
            }

, но это меняет цвет элемента. Но мне нужно, чтобы только ячейка (середина видимых элементов) всегда была СИНЕЙ.

1 Ответ

0 голосов
/ 06 августа 2020

Если вы хотите, чтобы средняя ячейка средней строки была синей, измените if (position ==2) на if (position ==1), индекс в массиве начинается с нуля, а не с 1

...