2017-02-22 15 views
0

Я пытаюсь поболтать с socket.io. Я хотел бы, чтобы было видно только первое имя пользователя сообщения того же пользователя.Как скрыть второе имя пользователя сообщения того же пользователя в списке?

Например:

 Username | Message 

item: Hans:  hello   (first message with name of user) 
item:   How are you? (second message without username) 
item: Look:  Thanks, good! 
item:   you?   (second message without username) 

Ниже код работает иногда хорошо, иногда неправильно. При прокрутке списка иногда появляется второе имя пользователя того же пользователя, другое время скрыто. Как я могу сделать второе имя пользователя одного и того же пользователя, будет скрыто и разделителем?

Простой код:

package com.example.seadog.fb_dialog; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 

public class MyBaseAdapter extends BaseAdapter { 

    Context context; 
    ArrayList<ListData> items = new ArrayList(); 
    LayoutInflater inflater; 

    int id = 0; 

    public MyBaseAdapter(Context context, ArrayList items) { 
     this.context = context; 
     this.items = items; 
     inflater = LayoutInflater.from(this.context); 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public ListData getItem(int position) { 
     return items.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     MyViewHolder mViewHolder; 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.list_item, parent, false); 
      mViewHolder = new MyViewHolder(convertView); 
      convertView.setTag(mViewHolder); 
     } else { 
      mViewHolder = (MyViewHolder) convertView.getTag(); 
     } 

     ListData currentListData = getItem(position); 

     mViewHolder.Title.setText(currentListData.getTitle()); 
     mViewHolder.Desc.setText(currentListData.getDescription()); 

     if (id != currentListData.getID() || position == 0) { 
      mViewHolder.Title.setVisibility(View.VISIBLE); 
     }else{ 
      mViewHolder.Title.setVisibility(View.GONE); 
     } 

     id = currentListData.getID(); 

     return convertView; 
    } 

    private class MyViewHolder { 
     TextView Title, Desc; 

     public MyViewHolder(View item) { 
      Title = (TextView) item.findViewById(R.id.txtitem); 
      Desc = (TextView) item.findViewById(R.id.descitem); 
     } 
    } 
} 

ответ

0

Вы, вероятно, может изменить его немного как:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    MyViewHolder mViewHolder; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_item, parent, false); 
     mViewHolder = new MyViewHolder(convertView); 
     convertView.setTag(mViewHolder); 
    } else { 
     mViewHolder = (MyViewHolder) convertView.getTag(); 
    } 

    id = position > 0 ? getItem(position - 1).getID() : -1; 

    ListData currentListData = getItem(position); 

    mViewHolder.Title.setText(currentListData.getTitle()); 
    mViewHolder.Desc.setText(currentListData.getDescription()); 

    if (id == -1 && id != currentListData.getID()) { 
     mViewHolder.Title.setVisibility(View.VISIBLE); 
    } else { 
     mViewHolder.Title.setVisibility(View.GONE); 
    } 

    return convertView; 
} 

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

+0

'id = position> 0? getItem (позиция - 1) .getID(): 0; 'это разрешает мою проблему и условие изменено на' if (id! = currentListData.getID()) '. Теперь я вижу, что это хорошие дела. Как я могу быть уверен, что getView() будет вызываться с последовательным? Я должен быть уверен. – SeaDog

+0

'getView()' вызывается во время выполнения в зависимости от того, какой элемент списка необходимо создать/воссоздать. Это будет зависеть от действия пользователя (прокрутки), вы никогда не сможете гарантировать, что он вызывается с последовательными позициями. Вы можете безопасно использовать код в своем ответе. –

+1

ОК, я использую ваше решение. Спасибо! – SeaDog

Смежные вопросы