Страница 1 из 1

ListViewItem как ListView

Добавлено: 15 апр 2015, 15:53
djdf_crash
Здравствуйте всем. Подскажите, плиз, как создать ListView, что бы каждый элемент был ListView. Или киньте ссылкой, к сожалению google мне не смог помочь :(

Re: ListViewItem как ListView

Добавлено: 15 апр 2015, 15:59
Foenix
раз гугл ничего об этом не знает, значит это что-то не то.
Объясни, чего ты сделать собрался?

Re: ListViewItem как ListView

Добавлено: 15 апр 2015, 16:06
djdf_crash
Есть ListView + Header. Каждый ListViewItem должен быть ListView. Я так понимаю это будет ListView в ListView. Могу скинуть ссылку на GitHub ;) там как бы всё работает но при скроллинге подтормаживает. Вот я и думаю, может не правильно организовано...

Re: ListViewItem как ListView

Добавлено: 15 апр 2015, 16:50
Foenix
да картинку покажи - для чего это?
скрол будет глючить, потому что листвью для этого не предназначен.

Re: ListViewItem как ListView

Добавлено: 15 апр 2015, 16:58
djdf_crash
Foenix писал(а):да картинку покажи - для чего это?
скрол будет глючить, потому что листвью для этого не предназначен.
Это расписание.
https://drive.google.com/file/d/0B95oCk ... sp=sharing
подскажи что лучше использовать для этих целей?

попробую описать проблему полностью:
Создаю листвью, устанавливаю на него свой адаптер унаследованный от арейадаптера, в нем переопределяю метод гетвью, в нём нахожу ещё один листвью для него устанавливаю адаптер, а в этом адаптере уже устанавливаю все значения через метод findViewById() (по другому не могу найти View, так как в метод getView() почему-то не передается convertView)

Re: ListViewItem как ListView

Добавлено: 15 апр 2015, 19:38
Foenix
где ты тут видишь листвью в листвью? это единый листвью. Один.
Я бы делала так.
Дни недели расположила бы на вьюпейджере - так удобно листать дни календаря, а не скопом как у тебя тут.
А заголовки или перерывы что там тебя на бледноголубом фоне - делаешь так.
все расписание это курсор один, где будут данные и еще один столбец (или что-то такое в других стобцах) чтоб отличить перерыв это или нет.
Делаешь кастомный листвью где два лэйаута будут - один белый с черным текстом, а под ним голубой (и делаешь ему visible=gone) и в методе getView кастомного адаптера определяешь - если это перерыв, то второй лэйаут делаешь видимым, если не перерыв, то видим первый лэйаут.
Все очень просто.
Если тебе нужно единый листвью - то точно так же, только будут три типа лэйаутов.

Re: ListViewItem как ListView

Добавлено: 15 апр 2015, 21:11
Foenix
если ты совсем начинающий, я еще не упомянула, что тебе нужна база данных, уметь делать к ней запросы.. советую уроки читать - знаний нужна масса. Но само приложение несложное.
И задавай вопросы тут , а не в личку.

Re: ListViewItem как ListView

Добавлено: 16 апр 2015, 09:06
djdf_crash
Ок. Там уже готовый проект, я хотел его как то оптимизировать (убрать "тормоза" при скроллинге). Понял, что причина "тормозов", через многократный вызов метода findViewById(), каждый раз при прокрутке.
Ниже код второго адаптера наследование от BaseAdapter . Здесь по каким-то причинам convertView постоянно равно NULL. Тоисть не мого прикрутить вспомогательный класс ViewHolder.

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

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        String[] breakTimes = mContext.getResources().getStringArray(R.array.break_time);
        String[] pairTimes = mContext.getResources().getStringArray(R.array.pair_time);

        List<String> matches = new ArrayList<>();
        Matcher m = Pattern.compile("\\d{1,2}").matcher(pairTimes[position]);
        while (m.find()) {
            matches.add(m.group(0));
        }
        Calendar c = Calendar.getInstance(TimeZone.getDefault());
        c.set(Calendar.HOUR_OF_DAY, Integer.valueOf(matches.get(0)));
        c.set(Calendar.MINUTE, Integer.valueOf(matches.get(1)));
        c.set(Calendar.SECOND, 0);
        Date dateFrom = c.getTime();
        c.set(Calendar.HOUR_OF_DAY, Integer.valueOf(matches.get(2)));
        c.set(Calendar.MINUTE, Integer.valueOf(matches.get(3)));
        Date dateTo = c.getTime();
        c = Calendar.getInstance();
        Date currTime = new Date(c.getTimeInMillis());
        Calendar cal = Calendar.getInstance();
        cal.setTime(mDate);
        boolean current = (currTime.after(dateFrom) && currTime.before(dateTo) && (c.get(Calendar.DAY_OF_WEEK) == cal.get(Calendar.DAY_OF_WEEK)));

        if (getItemViewType(position) == TYPE_PAIR) {
            Lesson lesson = (Lesson) mData.get(position).second;
            view = mInflater.inflate(R.layout.ssked_pair_list_item, null, false);
            if (current){
                view.findViewById(R.id.pair_time_text).setBackgroundColor(Strings.COLOR_ACTIVE_PAIR);
                view.findViewById(R.id.pair_aud_text).setBackgroundColor(Strings.COLOR_ACTIVE_PAIR);
                view.findViewById(R.id.pair_discip_text).setBackgroundColor(Strings.COLOR_ACTIVE_PAIR);
                view.findViewById(R.id.pair_type_text).setBackgroundColor(Strings.COLOR_ACTIVE_PAIR);
                view.findViewById(R.id.pair_number_text).setBackgroundColor(Strings.COLOR_ACTIVE_PAIR);
                ((TextView)view.findViewById(R.id.pair_number_text)).setTextColor(Color.WHITE);
                ((TextView)view.findViewById(R.id.pair_time_text)).setTextColor(Color.WHITE);
                ((TextView)view.findViewById(R.id.pair_aud_text)).setTextColor(Color.WHITE);
                ((TextView)view.findViewById(R.id.pair_discip_text)).setTextColor(Color.WHITE);
                ((TextView)view.findViewById(R.id.pair_type_text)).setTextColor(Color.WHITE);
            }
            ((TextView) view.findViewById(R.id.pair_time_text)).setText(pairTimes[position]);
            ((TextView) view.findViewById(R.id.pair_aud_text)).setText(lesson.place);
            ((TextView) view.findViewById(R.id.pair_discip_text)).setText(lesson.name);
            ((TextView) view.findViewById(R.id.pair_number_text)).setText(String.valueOf(mData.get(position).first));
            ((TextView) view.findViewById(R.id.pair_type_text)).setText(lesson.type);
            ((TextView) view.findViewById(R.id.break_time_text)).setText(breakTimes[position]);
            if (position == 5) view.findViewById(R.id.breakLayout).setVisibility(View.GONE);
        } else {
            view = mInflater.inflate(R.layout.ssked_no_pair_list_item, null, false);
            if (current){
                view.findViewById(R.id.pair_time_text).setBackgroundColor(Strings.COLOR_ACTIVE_NOPAIR);
                view.findViewById(R.id.pair_nopair_text).setBackgroundColor(Strings.COLOR_ACTIVE_NOPAIR);
                view.findViewById(R.id.pair_number_text).setBackgroundColor(Strings.COLOR_ACTIVE_NOPAIR);
                ((TextView)view.findViewById(R.id.pair_number_text)).setTextColor(Color.WHITE);
                ((TextView)view.findViewById(R.id.pair_time_text)).setTextColor(Color.WHITE);
                ((TextView)view.findViewById(R.id.pair_nopair_text)).setTextColor(Color.WHITE);
            }
            ((TextView) view.findViewById(R.id.pair_time_text)).setText(pairTimes[position]);
            ((TextView) view.findViewById(R.id.pair_number_text)).setText(String.valueOf(position + 1));
            ((TextView) view.findViewById(R.id.break_time_text)).setText(breakTimes[position]);
            if (position == 5) view.findViewById(R.id.breakLayout).setVisibility(View.GONE);
        }
        return view;
    }
Данные получаю через JSON.