عرض الدردشات المستمرة من المستخدم في نفس الفقاعة
-
26-12-2019 - |
سؤال
أنا أعمل على تطبيق الدردشة..وهذا ما قمت به حتى الآن.
الآن ما أريده هو هذا:
من فضلك أنا عالق وليس لدي أي فكرة عن كيفية العمل على واجهة المستخدم هذه ..أي إذا قام أحد المستخدمين بعرض الدردشة مرة أخرى ، فإذا كانت 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();
لا تنتمي إلى StackOverflow