Pregunta

Estoy trabajando en el chat de la aplicación..Esto es lo que he hecho hasta ahora.chat bw two

Ahora lo que yo quiero es este:grouping continuous chat from a user

Por favor, estoy atascado y no recibe ninguna idea de cómo trabajar con esta interfaz de usuario..yo.e Si un usuario ver las vistas de el chat de nuevo,entonces si msg eran continuas de un usuario,a continuación, mostrar en la misma burbuja, como en la segunda imagen.Este chat, cosa que es todo local,sin servicios o servidor que se utiliza.Yo estoy dando mi código.

MessageActivity.java

public class MessageActivity extends ListActivity {
/** Called when the activity is first created. */

ArrayList<Message> messages;
AwesomeAdapter adapter;
EditText text;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    text = (EditText) this.findViewById(R.id.text);


    this.setTitle("Harish");
    messages = new ArrayList<Message>();
    adapter = new AwesomeAdapter(this, messages);
    setListAdapter(adapter);

}
public void sendMessage(View v)
{
    String newMessage = text.getText().toString().trim(); 
    //String msg="\nTesting";
    if(newMessage.length() > 0)
    {
        text.setText("");
        //addNewMessage(new Message(newMessage+msg, true));
        addNewMessage(new Message(newMessage, true));
    }
}
public void sendMessage2(View v)
{
    String newMessage = text.getText().toString().trim(); 
    if(newMessage.length() > 0)
    {
        text.setText("");
        addNewMessage(new Message(newMessage, false));

    }
}
void addNewMessage(Message m)
{
    messages.add(m);
    adapter.notifyDataSetChanged();
    getListView().setSelection(messages.size()-1);
}

}

AwesomeAdapter.java

public class AwesomeAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<Message> mMessages;



public AwesomeAdapter(Context context, ArrayList<Message> messages) {
    super();
    this.mContext = context;
    this.mMessages = messages;
}

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

@Override
public Object getItem(int position) {       
    return mMessages.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Message message = (Message) this.getItem(position);

    ViewHolder holder; 
    if(convertView == null)
    {
        holder = new ViewHolder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.sms_row, parent, false);
        holder.message = (TextView) convertView.findViewById(R.id.message_text);
        convertView.setTag(holder);
    }
    else
        holder = (ViewHolder) convertView.getTag();

    holder.message.setText(message.getMessage());

    LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();


        if(message.isMine())
        {
            holder.message.setBackgroundResource(R.drawable.me);
            lp.setMargins(15, 10, 0, 10);


        }

        else
        {
            holder.message.setBackgroundResource(R.drawable.you);
            lp.setMargins(0, 10, 15, 10);
        }
        holder.message.setLayoutParams(lp);


    return convertView;
}
private static class ViewHolder
{
    TextView message;
}


@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

}

Message.java

public class Message {

String message;

boolean isMine;

public Message(String message, boolean isMine) {
    super();
    this.message = message;
    this.isMine = isMine;

}
/**
 * Constructor to make a status Message object
 * consider the parameters are swaped from default Message constructor,
 *  not a good approach but have to go with it.
 */
public Message(boolean status, String message) {
    super();
    this.message = message;
    this.isMine = false;

}
public String getMessage() {
    return message;
}

public boolean isMine() {
    return isMine;
}

}

¿Fue útil?

Solución

Sobre la obtención de un nuevo mensaje, anexar el mensaje para el mensaje anterior en el ArrayList<Message>(es decir,conseguir mensaje anterior desde el arraylist y agregar anexar este nuevo mensaje con un salto de línea(\n) y se debe trabajar) y de la llamada adapter.notifyDataSetChanged();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top