Моя позиция getView() повторяется в пользовательском представлении списка?

Я использую пользовательский ListView. Он работает нормально. Я использую этот ListView для различения прочитанных и непрочитанных сообщений. Я получаю сообщение прочитанный идентификатор, который равен 0 для непрочитанного сообщения и 1 для прочитанного сообщения. Мой код getView() следующий: ---

public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder;
    if(convertView==null)
    {
        convertView=mInflater.inflate(R.layout.custom_home_list, null);
        holder=new ViewHolder();
        holder.address=(TextView)convertView.findViewById(R.id.person_name);
        holder.body=(TextView)convertView.findViewById(R.id.full_msg);
        holder.date=(TextView)convertView.findViewById(R.id.msg_time);
        convertView.setTag(holder);
    }else
    {
        holder=(ViewHolder)convertView.getTag();
    }
    int size=mArrList.size();
    if ((mArrList != null) || size > 0) 
    {
        if(mArrList.get(position).read.equalsIgnoreCase("1")){
        holder.address.setText(mArrList.get(position).address);
        holder.body.setText(mArrList.get(position).body);
        holder.date.setText(mArrList.get(position).date);
        }else{
            holder.address.setText(mArrList.get(position).address);
            holder.body.setText(mArrList.get(position).body);
            holder.body.setTextColor(mArrList.get(position).color);
            holder.date.setText(mArrList.get(position).date);
        }
    }
    return convertView;
}

здесь я использую это условие для дифференциации: -

 if(mArrList.get(position).read.equalsIgnoreCase("1")){
   }

Но Повторить позицию после 5 элементов, поэтому мое условие не работает. У меня много поиска для этого, но я не понимаю. Пожалуйста, помогите мне . Заранее спасибо! С уважением Дипанкер


person Deepanker Chaudhary    schedule 06.11.2012    source источник
comment
кажется, так и должно быть - ListView иногда вызывает getView() с той же позицией.   -  person sandrstar    schedule 06.11.2012
comment
Я не понимаю разницы между двумя случаями if/else. Вы делаете то же самое, за исключением того, что в первом случае цвет не задан. Это может быть причиной вашей проблемы ...   -  person sdabet    schedule 06.11.2012
comment
Я хочу отличать прочитанное и непрочитанное сообщение от read_id, и в моем макете layout_height не принимает fill_parent, а не wrap_content, и он принимает 0dp и преобразует повтор просмотра после каждых 5 позиций, поэтому, когда позиция снова будет равна 0, мое условие не различает сообщения   -  person Deepanker Chaudhary    schedule 06.11.2012
comment
мой колер кажется после каждой пятой строки не в соответствии с прочитанными и непрочитанными   -  person Deepanker Chaudhary    schedule 06.11.2012
comment
эй @DeepankerChaudhary, как ты решил эту проблему, у меня такая же, пожалуйста, отметь меня :)   -  person Rakeeb Rajbhandari    schedule 22.01.2014
comment
@ user2247689: Адаптер getView() повторяет каждую прокрутку в зависимости от стороны экрана. Итак, если вы столкнулись с проблемой такого типа, то какую логику вы поместили в адаптер, которую следует использовать вне адаптера, означает поместить ваши данные в arraylist вне адаптера с условием и просто списком массивов paas в адаптере.   -  person Deepanker Chaudhary    schedule 27.01.2014


Ответы (1)


В вашем коде вы явно не устанавливаете цвет в случае состояния «прочитано» (первый раздел вашего if/else).

Это означает, что если ваше представление было переработано и ранее использовалось для «непрочитанного» элемента, то цвет останется прежним.

Вам нужно явно указать, какой цвет вы хотите в обоих случаях, потому что вы не можете знать, какой исходный цвет.

person sdabet    schedule 06.11.2012
comment
теперь я использую это условие if else, когда помещаю значение в arrayList - person Deepanker Chaudhary; 06.11.2012
comment
@fiddler Не могли бы вы ответить на этот вопрос, у меня такая же проблема, я пытался решить, но безуспешно. Вот ссылка: stackoverflow. ком/вопросы/33417128/ - person Soft Kaka; 30.10.2015