Стиль просмотра списка Каждая строка

это код в моем пользовательском адаптере (КОД В КОРИЧНЕВОМ ЦВЕТЕ), когда изначально список построен, правильное поле применяется к допустимым элементам, когда я прокручиваю вниз и снова прокручиваю вверх все строки в списке, сдвигая поле влево на 20, что я делаешь неправильно ответь скорее

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        // getting data
        final ViewMovieDetailsModel_ViewComments movies = getItem(position);

        if (convertView == null) 
        {
            convertView = View.inflate(context, R.layout.comment_row, null);                
            holder = new ViewHolder();

            //getting handles

            holder.comments_linearLayout = (LinearLayout) convertView.findViewById(R.id.comments_linearLayout);
            holder.commenter_textView = (TextView) convertView.findViewById(R.id.comment_row_commenter);
            holder.commented_on_textView = (TextView) convertView.findViewById(R.id.comment_row_comment_time);
            holder.comment_text_textView = (TextView) convertView.findViewById(R.id.comment_row_comment_text);
            holder.reply_button = (Button) convertView.findViewById(R.id.comment_row_reply_button);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder)convertView.getTag();
        }

        if (movies != null) 
        {
            if (((movies.getParent_comment_id()).toString().equals("null")) && session.isLoggedIn()==true) {
                holder.reply_button.setVisibility(View.VISIBLE);
            }else{
                holder.reply_button.setVisibility(View.INVISIBLE);
            }


`if (!((movies.getParent_comment_id()).toString().equals("null"))) 
{

LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
                    params.setMargins(20, 0, 0, 0);
                    holder.comments_linearLayout.setLayoutParams(params);
}`


            holder.commenter_textView.setText(movies.getUsername_commentor());

            holder.commenter_textView.setTag(movies.getUser_id_commentor());

        return convertView;
    }

person Nitin Misra    schedule 29.06.2013    source источник
comment
использовать пользовательский список с пользовательским адаптером   -  person Raghunandan    schedule 29.06.2013
comment
@Raghunandan я использую собственный список с пользовательским адаптером   -  person Nitin Misra    schedule 29.06.2013
comment
@Tom Reznik опубликовал весь код   -  person Nitin Misra    schedule 29.06.2013


Ответы (2)


потому что вы устанавливаете поля (коричневый шрифт) в операторе if:

if (movies != null)

просто уберите его из этого блока if (например, поместите прямо перед точкой возврата)

Сейчас этот код, вероятно, не выполняется при загрузке первого просмотра, так как фильм нулевой. Когда getView вызывается во второй раз, фильм не равен нулю, а поле устанавливается в соответствии с вашим «коричневым» кодом.

если это не решение - возможно, внутреннее условие оператора if неверно (тот, который находится в первой «коричневой» строке). так что .. ваша собственная логика не позволяет установить поля так, как вы хотите:)

Пожалуйста, дайте мне знать, если это поможет.

person Jacek Milewski    schedule 29.06.2013
comment
не помогает, я уверяю вас, что условие ЕСЛИ, которое я упомянул здесь, верно при первом вызове, строки устанавливаются в соответствии с указанным выше условием, но когда я прокручиваю вниз и прокручиваю вверх, все строки приобретают один и тот же стиль, пожалуйста, помогите, я застрял на этом для пока - person Nitin Misra; 29.06.2013
comment
Я настоятельно рекомендую вынести настройки параметров макета из очень if и поместить их прямо перед точкой возврата. Просто попробовать - ничего не стоит. представления в ListView используются повторно. Так что они не строятся каждый раз с нуля. Это, вероятно, причина, по которой у вас есть такие коды, как movie != null. - person Jacek Milewski; 30.06.2013
comment
или более простое свидетельство события: в «коричневом» блоке кода поместите некоторую точку останова или оператор журнала и проверьте, выполняется ли он каждый раз, когда вы ожидаете, что он - person Jacek Milewski; 30.06.2013
comment
Я не уверен, правильно ли я вижу - ваш оператор return находится в блоке if(movies!= null)? - person Jacek Milewski; 30.06.2013
comment
спасибо за помощь и за ваше время тоже. Я использовал (@Android Noob way). Я использую прозрачное изображение VIEW.Gone по умолчанию, а когда условие соответствует VIEW.Visible. У меня это работает (но не знаю, почему параметры макета не работают). Если у вас есть время, посмотрите на это stackoverflow.com/questions/2958701/ - person Nitin Misra; 30.06.2013

Один из способов решения этой проблемы — вместо использования LayoutParams.setMargins(20, 0, 0, 0) вы можете создать пустой TextView, ширина которого по умолчанию равна 20 dp и чья позиция будет слева от содержимого ваших строк. По умолчанию это будет View.GONE, но когда произойдет if (!((movies.getParent_comment_id()).toString().equals("null"))), вы можете установить его на View.VISIBLE.

person Android Noob    schedule 29.06.2013
comment
Я хочу, чтобы вся линейная компоновка строки имела поля, а не только текстовое представление. не могли бы вы предоставить мне способ - person Nitin Misra; 30.06.2013