عرض الدردشات المستمرة من المستخدم في نفس الفقاعة

StackOverflow https://stackoverflow.com//questions/25072800

سؤال

أنا أعمل على تطبيق الدردشة..وهذا ما قمت به حتى الآن.chat bw two

الآن ما أريده هو هذا:grouping continuous chat from a user

من فضلك أنا عالق وليس لدي أي فكرة عن كيفية العمل على واجهة المستخدم هذه ..أي إذا قام أحد المستخدمين بعرض الدردشة مرة أخرى ، فإذا كانت MSG مستمرة من مستخدم ، فقم بإظهارها في نفس الفقاعة كما في الصورة الثانية.كل شيء في الدردشة محلي، ولا يتم استخدام أي خدمات أو خادم.أنا أعطي الكود الخاص بي.

رسالة النشاط.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;
}

}

رسالة.جافا

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;
}

}

هل كانت مفيدة؟

المحلول

عند الحصول على رسالة جديدة، قم بإلحاق تلك الرسالة بالرسالة السابقة في ArrayList<Message>(أي.احصل على الرسالة السابقة من قائمة المصفوفات وأضف هذه الرسالة الجديدة مع فاصل أسطر (\n) وينبغي أن تعمل) والاتصال adapter.notifyDataSetChanged();

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top