У моего приложения Android есть простая функция чата. Чаты хранятся во встроенной базе данных SQLite. Я использую ListView с SimpleCursorAdapter для отображения чатов. Это то, что у меня есть:Как изменить Android SimpleCursorAdapter для использования другого макета в зависимости от данных из базы данных?
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();
}
}
У меня есть модель чат, который имеет логическое значение, названный localFlag, как один из его полей. Если чат отправляется с устройства, localFlag устанавливается как истина (или 1), если чат получен от внешнего устройства, localFlag устанавливается как false (или 0).
Мой SQL вызов:
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);
}
То, что я хочу сделать, это если локальный флаг установлен, то я хотел бы использовать это:
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.outgoing_line_of_chat, chatCursor, fromColumns, toViews, 0);
и если локальный флаг не установлен Я хотел бы использовать это:
SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(getContext(), R.layout.incoming_line_of_chat, chatCursor, fromColumns, toViews, 0);
Обратите внимание, что я хочу использовать R.layout.outgoing_line_of_chat
против R.layout.incoming_line_of_chat
.
Как я могу это сделать?
в вашем ChatSimpleCursorAdapter тест конструктора, если флаг == 1, так что вы установите раскладку отправителю еще установить раскладку to recever –
Не знаете, как это сделать. Я знаю, как выполнить тест, но я не знаю, как использовать 'ChatSimpleCursorAdapter simpleCursorAdapter = новый ChatSimpleCursorAdapter (getContext(), R.layout.outgoing_line_of_chat, chatCursor, fromColumns, toViews, 0); 'в моем расширенном SimpleCursorAdapter. – Brian
Конструктор ChatSimpleCursorAdapter по-прежнему то же самое, просто удалите «макет int» и сделайте тест, чтобы установить макет в свой метод super(), для чего вам нужны все параметры, которые вы супер(), а не конструктор ChatSimpleCursorAdapter –