你好。有一个聊天活动,其中包含ListView消息。对于ListViewitem'a,有两种样式:左侧的消息(来自对话者),右侧的消息(您的)。
有一段代码,在给定的 URI 处,从服务器接收 JSON,它被解析为消息,然后解析为ListView项目。
JSON 看起来像这样:author:"author",reciever:"reciever",time:"time",content:"content"
所以,我需要根据谁拥有消息,它在ListView. 那些。如果我们收到消息,则ListViewitem'a 的样式在左侧,如果我们发送消息,则在右侧。(与所有使者一样)。
private class ListViewLoaderTask extends AsyncTask<String, Void, SimpleAdapter> {
JSONObject jObject;
@Override
protected SimpleAdapter doInBackground(String... strJson) {
try {
jObject = new JSONObject(strJson[0]);
parse(jObject);
} catch (Exception e) {
Log.d("JSON Exception1", e.toString());
}
List<HashMap<String, Object>> messages = null;
try {
messages = parse(jObject);
} catch (Exception e) {
Log.d("Exception", e.toString());
}
String[] from = {"content", "time", "author"};
int[] to = {R.id.contentMSG, R.id.timeMSG, R.id.usernameMSG};
/*
Вот здесь нужно исходя из того, кто автор сообщения,
выбрать layout
*/
SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), messages, R.layout.one_msg_item, from, to);
adapter.notifyDataSetChanged();
return adapter;
}
}
public List<HashMap<String, Object>> parse(JSONObject jObject) {
JSONArray jMessages = null;
try {
jMessages = jObject.getJSONArray("Messages");
} catch (JSONException | NullPointerException e) {
e.printStackTrace();
}
return getMessages(jMessages);
}
private List<HashMap<String, Object>> getMessages(JSONArray jMessages) {
List<HashMap<String, Object>> messagesList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> message = null;
for (int i = 0; i < jMessages.length(); i++) {
try {
message = getMessage((JSONObject) jMessages.get(i));
messagesList.add(message);
} catch (JSONException | NullPointerException e) {
e.printStackTrace();
}
}
return messagesList;
}
private HashMap<String, Object> getMessage(JSONObject jMessage) {
HashMap<String, Object> message = new HashMap<String, Object>();
String author = "";
String client = "";
String time = "";
String content = "";
try {
author = jMessage.getString("author");
client = jMessage.getString("client");
time = jMessage.getString("time");
content = jMessage.getString("content");
message.put("author", author);
message.put("client", client);
message.put("time", time);
message.put("content", content);
} catch (JSONException e) {
e.printStackTrace();
}
return message;
}
通常,您会制作一个提供所需视图的适配器,而不会忘记检查 ViewHolder,例如:http ://android.amberfog.com/?p=296