1
0
mirror of https://github.com/moparisthebest/Yaaic synced 2024-11-04 16:35:05 -05:00

(Fixed issue 5) store message adapter in conversation and reuse it

This commit is contained in:
Sebastian Kaspari 2010-03-17 19:32:27 +01:00
parent 876b96c358
commit 9f19c0b7ac
3 changed files with 32 additions and 24 deletions

View File

@ -186,7 +186,14 @@ public class DeckAdapter extends BaseAdapter
public MessageListView renderConversation(Conversation conversation, ViewGroup parent) public MessageListView renderConversation(Conversation conversation, ViewGroup parent)
{ {
MessageListView list = new MessageListView(parent.getContext()); MessageListView list = new MessageListView(parent.getContext());
list.setAdapter(new MessageListAdapter(conversation, parent.getContext()));
MessageListAdapter adapter = conversation.getMessageListAdapter();
if (adapter == null) {
adapter = new MessageListAdapter(conversation, parent.getContext());
conversation.setMessageListAdapter(adapter);
}
list.setAdapter(adapter);
list.setDivider(null); list.setDivider(null);
list.setLayoutParams(new Gallery.LayoutParams( list.setLayoutParams(new Gallery.LayoutParams(

View File

@ -24,6 +24,8 @@ import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.yaaic.adapter.MessageListAdapter;
/** /**
* Base class for conversations * Base class for conversations
* *
@ -44,6 +46,7 @@ public abstract class Conversation
private List<Message> buffer; private List<Message> buffer;
private List<Message> history; private List<Message> history;
private String name; private String name;
private MessageListAdapter adapter;
/** /**
* Get the type of conversation (channel, query, ..) * Get the type of conversation (channel, query, ..)
@ -131,4 +134,20 @@ public abstract class Conversation
{ {
buffer.clear(); buffer.clear();
} }
/**
* Store the adapter of this conversation
*/
public void setMessageListAdapter(MessageListAdapter adapter)
{
this.adapter = adapter;
}
/**
* Get the MessageList Adapter of this conversation if known
*/
public MessageListAdapter getMessageListAdapter()
{
return adapter;
}
} }

View File

@ -232,33 +232,15 @@ public class ConversationActivity extends Activity implements ServiceConnection,
public void onConversationMessage(String target) public void onConversationMessage(String target)
{ {
Conversation conversation = server.getConversation(target); Conversation conversation = server.getConversation(target);
MessageListAdapter adapter = conversation.getMessageListAdapter();
while(conversation.hasBufferedMessages()) { while(conversation.hasBufferedMessages()) {
// XXX: I wrote all this beautiful code but the view sometimes has
// not all children like the adapter so getChildAt() will return
// no child view or not the view that is logical connected to
// the item in the adapter at the same position. So we just
// notify the whole deck adapter (as fallback).
Message message = conversation.pollBufferedMessage(); Message message = conversation.pollBufferedMessage();
int position = deckAdapter.getPositionByName(target); if (adapter != null) {
if (position != -1) {
MessageListView view = (MessageListView) deck.getChildAt(position);
if (view != null) {
MessageListAdapter adapter = view.getAdapter();
adapter.addMessage(message); adapter.addMessage(message);
} else { } else {
Log.d(TAG, "MessageListView Adapter is null (position: " + position + ")"); Log.d(TAG, "MessageListAdapter is null (conversation " + conversation.getName() + " has no adapter assigned)");
// Fallback: We could not get the MessageListAdapter. Notify the whole deck
deckAdapter.notifyDataSetChanged();
}
}
if (deckAdapter.isSwitched() && target.equals(deckAdapter.getSwitchedName())) {
MessageListView switchedView = deckAdapter.getSwitchedView();
switchedView.getAdapter().addMessage(message);
} }
} }
} }