0
我正在開發一個Android項目,其中我目前正在使用聊天功能。現在,無論何時用戶發送消息,都會將其添加到由BaseAdapter填充的ListView中。 baseAdapterObject.add(item);
添加新消息。Android:使用BaseAdapter填充ListView中的訪問元素
現在,無論何時用戶發送消息,我都將其直接添加到已存在的列表中,然後等待服務器的答覆,確認消息已發送。對於第一步,我想顯示一個灰色複選標記,對於從服務器收到的第二條消息,我想顯示藍色複選標記。
不幸的是,我不知道如何訪問已填充的列表並更改ImageView的背景圖像。。每封郵件都有一個隨機數,我可以比較哪些郵件收到確認。
代碼:
public void recieveUpdatedMessageFromServer(String channelName, Map<String, Object> input){
String randomNumberFromServer = ((Map) input.get("data")).get("random").toString();
if (randomNumberFromServer.equals(randomNos)) {
messageRecieved = true;
randomNos = "";
}
chatMessagesAdapter.add(insertMap);
runOnUiThread(new Runnable() {
@Override
public void run() {
chatMessagesAdapter.notifyDataSetChanged();
}
});
public class ChatMessagesAdapter extends BaseAdapter {
private Activity activity = null;
private ArrayList<HashMap<String, String>> data;
private LayoutInflater inflater = null;
public ChatMessagesAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void add(HashMap<String, String> item) {
data.add(item);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.chat_messages_row, parent, false);
TextView chatText = (TextView) vi.findViewById(R.id.chatText);
ImageView userImage = (ImageView) vi.findViewById(R.id.chatImage);
TextView firstName = (TextView) vi.findViewById(R.id.personName);
ImageView checkMark = (ImageView) vi.findViewById(R.id.checMarkChat);
HashMap<String, String> chatList;
chatList = data.get(position);
chatText.setText(chatList.get(ChatMessagesActivity.chatText));
checkMark.setBackgroundResource(R.drawable.blue_icon);
firstName.setText(chatList.get(ChatMessagesActivity.firstName));
if (!(chatList.get(ChatMessagesActivity.chatImageId).equals("0"))) {
Picasso.with(context).load(StaticRestTemplate.baseURL + "image/" + chatList.get(ChatMessagesActivity.chatImageId)).fit().into(userImage);
}
return vi;
}
}
}
chat_messages_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="130dp"
android:orientation="horizontal"
android:padding="2.5dip">
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="125dp"
android:id="@+id/frameLayout2">
<ImageView
android:id="@+id/chatImage"
android:layout_width="107dp"
android:layout_height="107dp"
android:padding="2dp" />
</FrameLayout>
<TextView
android:id="@+id/chatText"
android:layout_width="230dp"
android:layout_height="76dp"
android:layout_gravity="right|center_vertical"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/frameLayout2"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/personName"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/chatText"
android:layout_alignEnd="@+id/chatText"
android:layout_toRightOf="@+id/textView"
android:layout_toEndOf="@+id/textView"
/>
<ImageView
style="?android:attr/buttonStyleSmall"
android:layout_width="40dp"
android:layout_height="40dp"
android:id="@+id/checMarkChat"
android:background="@drawable/blue_icon"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/personName"
android:layout_alignEnd="@+id/personName" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="49dp"
android:layout_marginStart="49dp"
android:layout_marginTop="208dp" />
</RelativeLayout>
我希望這麼多的信息enuf。請讓我知道是否有其他要求。謝謝。 :-)
謝謝你的回覆。所以,無論何時我填充列表,我應該填充這個列表不同或一起?每個味精都附有一個唯一的ID,並且是列表的一部分。我收到關於消息的確認後,如何添加藍色勾號標記? –
如果你有一個唯一的ID附加到每條消息,我會建議你使用HashMap你可以從你的HashMap中檢索消息並更改打勾狀態並請求notifyDatasetChanged來更新你的列表。 –
sihao
這有助於....我會嘗試一下,如果我有任何問題,請回復您。謝謝。 –