Meine Android App hat eine einfache Chat-Funktion. Die Chats werden in der integrierten SQLite-Datenbank gespeichert. Ich verwende ein ListView mit einem SimpleCursorAdapter, um die Chats anzuzeigen. Das ist, was ich habe:Wie kann ich einen Android SimpleCursorAdapter ändern, um abhängig von Daten aus der Datenbank ein anderes Layout zu verwenden?
public class Chat extends Fragment {
private View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
rootView = inflater.inflate(R.layout.chat, container, false);
return rootView;
}
@Override
public void onViewCreated(View rootView, Bundle savedInstanceState){
super.onViewCreated(rootView, savedInstanceState);
displayChats();
}
public void displayChats(){
DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
Cursor chatCursor = databaseHelper.getChatsCursor();
String[] fromColumns = {"messageInfo","messageText"};
int toViews{R.id.message_info, R.id.message_text};
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.line_of_chat, chatCursor, fromColumns, toViews, 0);
ListView listView = (ListView) rootView.findViewById(R.id.chat_text_display);
listView.setAdapter(simpleCursorAdapter);
databaseHelper.close();
}
}
ich ein Chat-Modell habe, die einen boolean hat, mit dem Namen localFlag, als eines seiner Felder. Wenn der Chat vom Gerät gesendet wird, wird localFlag als wahr (oder 1) festgelegt. Wenn der Chat von extern an das Gerät gesendet wird, wird localFlag als false (oder 0) festgelegt.
My SQL-Aufruf:
public static final String GET_ALL_CHATS = "select _id, localFlag, messageText, messageInfo from ChatTable";
public Cursor getChatsCursor(){
SQLiteDatabase sqliteDB = this.getReadableDatabase();
return sqliteDB.rawQuery(GET_ALL_CHATS, null);
}
Was ich tun möchte, ist, wenn die lokalen Flag gesetzt ist, würde Ich mag dies verwenden:
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.outgoing_line_of_chat, chatCursor, fromColumns, toViews, 0);
und wenn die lokalen Flag nicht gesetzt ist würde ich diesen gerne verwenden:
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.incoming_line_of_chat, chatCursor, fromColumns, toViews, 0);
Hinweis I R.layout.outgoing_line_of_chat
vsverwenden möchte.
Wie kann ich dies erreichen?
in Ihrem ChatSimpleCursorAdapter Konstruktor testen, ob Flag == 1, so dass Sie Ihr Layout an dem Absender gesetzt sonst setzen Ihr Layout zu receiver –
Nicht sicher, wie man das macht. Ich weiß, wie man den Test durchführt, aber was ich nicht weiß ist, wie man 'ChatSimpleCursorAdapter simpleCursorAdapter = new ChatSimpleCursorAdapter (getContext(), R.layout.outgoing_line_of_chat, chatCursor, fromColumns, toViews, 0); 'in meinem erweiterten SimpleCursorAdapter. – Brian
ChatSimpleCursorAdapter Konstruktor immer noch das gleiche löschen Sie einfach die "int-Layout" und den Test, um das Layout auf Ihre super() -Methode, was alles die Parameter Sie super() Methode nicht der ChatSimpleCursorAdapter Konstruktor –