1

имеется адаптер RecyclerView с условием. Хочу сделать чтобы при определенном значении полученных данных из List менялся LayoutInflater, Вот код условия

* String TypeID= rTypeID;

 @Override
        public int getItemViewType(int position) {
          *  if (position == TypeID.equals("2"))return TITEM1;
            return TTEM2;
        }



       @Override
        public void onBindViewHolder(final ViewHolder holder, int position) {

            holder.rTypeID = notes.get(position).getTypeID();


            switch (type) {
                case TITEM1:
                    //для итем1

                    break;
                case TITEM2:
                    //для итем2

                    break;
            }

        }        

        }

        public static class ViewHolder extends RecyclerView.ViewHolder {
            public final View mView;
           * public String rTypeID;

            public ViewHolder(View v) {
                super(v);
                mView = v;

            }
        }

Помогите пожалуйста все никак не могу понять, где проблемма указал * помогите что мне сюда писать (в этом коде неправильно) я незнаю что юда писать -->

 if (position == TypeID.equals("2"))return TITEM1;
                return TTEM2;
  • А зачем два метода getItemViewType() и для чего typeID типа String, если хранит число? – pavlofff May 21 '16 at 17:07
  • @pavlofff, ошибся когда сюда писал 2 метода, typeID почему стринг, потому что я получаю лист и позиция holder.rTypeID = notes.get(position).getTypeID(); получает стринг а не число/ исправил выше – Артем May 21 '16 at 17:37
  • Я вижу, что он получает. Зачем вы используете для числа тип String, а не int, к примеру. И что должно делать условие – pavlofff May 22 '16 at 01:00
  • @pavlofff, вот я делаю по этому примеру ссылка условие должно быть ---> если позиция итема(getTypeID) = 2 то меняется ресурс – Артем May 22 '16 at 04:52

1 Answers1

1

Вы используете тип String, который предназначен для хранения строковых переменных, чтобы хранить число. Затем вы пытаетесь сравнить разные типы - числовой int и строковый String, хотя даже для этого сравнения условие составлено неверно и конкретно в вашем сравнении вы сравниваете int (позицию) и результат сравнения строки с символом "2", что вернет boolean.
Хотя Java и имеет возможности к приведению строкового типа к числу, ваш подход изначально неверен, вам нужно хранить число в числовом типе изначально.

Далее, здесь в вашей задаче очевидное логическое противоречие - позиция айтема в списке и значение в поле TypeID - это два разных параметра.
Если вам нужна другая разметка для айтемов с полем в модели TypeID = 2, то и проверять нужно это условие, а не сравнивать с текущей позицией:

int TypeID = rTypeID;

 @Override
        public int getItemViewType(int position) {
            if (TypeID == 2 ) return TITEM1;
            return TTEM2;
        }

если же вам нужна другая разметка для второй позиции списка, то проверять нужно позицию, а не какое то поле в модели:

 @Override
    public int getItemViewType(int position) {
        if (position == 2) return TITEM1;
        return TTEM2;
    }

PS: писать "не могу понять где проблема" немного странно для программиста, потому что при ошибке выдается лог - стэктрейс, где указано в чем именно проблема - его надо прочитать и решать, как исправить.
Прежде чем продолжить программировать, рекомендую почитать какой то учебник по Java, с таким "багажом знаний" вы много все равно не напрограммируете, а копипастом чужих решений из интернета, не понимая языка, на котором пишите, еще никто программу не написал.

pavlofff
  • 36,765
  • Спасибо огромное, но учится на примерах разве плохо ? просто я с оператор if не сталкивался еще. Этот форум для вопросов и ответов вроде как, просто не все учатся на программистов и мое окружение даже в винду не знают, а читать маны по java ну этим точно интерес не создашь(особенно когда обсудить некем), а писать программку которую хочешь и учится ну это куда лучше, да кстати я скоро закончу возможно вы не правы ) – Артем May 22 '16 at 07:54
  • @Артем Примеры это не плохо, а только язык нужно знать - синтаксис, конструкции, правила и тп., чтобы по два дня не находится в тупике и ждать помощи неизвестно сколько из-за несоответствия типов, да и вообще понимать, что в примере происходит и как переделать под свою задачу без посторонней помощи. – pavlofff May 22 '16 at 08:55
  • а не подскажете как мне теперь вывести значение из class ViewHolder а то горит красным int TypeID = rTypeID; – Артем May 22 '16 at 11:34
  • @Артем то, что горит красным это плохо - что то не так. Однако мой уровень ясновидения еще не достиг такой силы, чтобы по цвету определять в чем там у вас проблема. IDE дает подсказку для всех ошибок, отмеченных красным - ее надо прочитать и исправить. – pavlofff May 22 '16 at 12:37
  • ,ну яже написал что TypeID не видит rTypeID из под class ViewHolder – Артем May 22 '16 at 14:27