Android 如何对房间数据库中的LiveData进行排序?使用按钮切换recyclerview';s项目';s指令
你好,我有两个问题我根本无法解决,但我认为它们最终是相关的。 我希望triyng能做到以下几点: 我有一个activity(Nota)作为添加/编辑notejava类。我想在ListFragment的recyclerview中显示这些注释。这是我能做到的。然而,当我试图把事情复杂化一点时,我却走到了死胡同。首先,我想根据两个参数对项目进行排序,主要是根据位置,然后是根据星星数(在评级栏中),当位置相同时。其次,我还希望有一个切换按钮,其工作是切换这些参数,这意味着首先根据星星的数量进行过滤,然后根据位置进行过滤。任何帮助都将不胜感激 现在,继续我已经尝试过的。存储库使用LiveData获取数据,而我似乎无法使用LiveData进行比较。因此,我尝试将其转换为一个列表,尝试使用MediatorLiveData和许多其他方法。不管怎样,我仍然停留在我开始的地方。这是我的代码: 记事本 这是我的记事本数据库(v2) 这是我的NoteViewModelAndroid 如何对房间数据库中的LiveData进行排序?使用按钮切换recyclerview';s项目';s指令,android,android-recyclerview,android-room,android-database,Android,Android Recyclerview,Android Room,Android Database,你好,我有两个问题我根本无法解决,但我认为它们最终是相关的。 我希望triyng能做到以下几点: 我有一个activity(Nota)作为添加/编辑notejava类。我想在ListFragment的recyclerview中显示这些注释。这是我能做到的。然而,当我试图把事情复杂化一点时,我却走到了死胡同。首先,我想根据两个参数对项目进行排序,主要是根据位置,然后是根据星星数(在评级栏中),当位置相同时。其次,我还希望有一个切换按钮,其工作是切换这些参数,这意味着首先根据星星的数量进行过滤,然后
公共类NoteViewModel扩展了AndroidViewModel{
私人记事本储存库;
私有LiveData-allNotes;
public NoteViewModel(@NonNull应用程序){
超级(应用);
repository=新的NoteRepository(应用程序);
allNotes=repository.getAllNotes();
}
公共作废插入(注2注){
储存库。插入(注);
}
公共作废更新(注v2注){
储存库。更新(注);
}
公共作废删除(注v2注){
删除(注);
}
公共LiveData getAllNotes(){
归还所有票据;
}
公共无效排序系统(){
Collections.sort((列出)allNotes,ByStars);
}
公共比较器ByStars=新比较器(){
@凌驾
公共整数比较(Notev2 o1,Notev2 o2){
返回Integer.valueOf(o1.stars).compareTo(Integer.valueOf(o2.stars));
}
};
}
最后,这是我的记事本适配器
公共类NoteAdapter扩展了ListAdapter{
私人监听;
公共NoteAdapter(){
超级(差异回调);
}
私有静态final DiffUtil.ItemCallback DIFF_CALLBACK=new DiffUtil.ItemCallback(){
@凌驾
公共布尔项相同(Notev2旧项,Notev2新项){
返回oldItem.getId()==newItem.getId();
}
@凌驾
公共布尔值是相同的内容(Notev2旧项,Notev2新项){
返回oldItem.getTitle_v2().equals(newItem.getTitle_v2())&&
oldItem.getLocation_v2()等于(newItem.getLocation_v2())&&
oldItem.getStars\u v2()等于(newItem.getStars\u v2())&&
oldItem.getOpening\u hours\u 1\u v2().等于(newItem.getOpening\u hours\u 1\u v2())&&
oldItem.getOpening\u hours\u 2\u v2()等于(newItem.getOpening\u hours\u 2\u v2())&&
oldItem.getOpening\u hours\u 3\u v2().等于(newItem.getOpening\u hours\u 3\u v2())&&
oldItem.getNotas_v2()等于(newItem.getNotas_v2());
}
};
@非空
@凌驾
public NoteHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.cardview\u列表\u 1,父项,错误);
返回新的票据持有人(itemView);
}
@凌驾
public void onBindViewHolder(@NonNull票据持有人,int位置){
Notev2 currentNote=getItem(位置);
holder.nTitle.setText(currentNote.getTitle_v2());
字符串slocation=”“+currentNote.getLocation_v2();
if(slocation.contains(“zioiu”))
slocation=“”;
holder.nLocation.setText(slocation);
Float numStars=Float.parseFloat(currentNote.getStars_v2());
保持架nStars设定值(numStars);
holder.nOpen.setText(新StringBuilder().append(currentNote.getOpening_小时数_1_v2()).append(currentNote.getOpening_小时数_2_v2()).append(currentNote.getOpening_小时数_3_v2()).toString();
holder.nNotas.setText(currentNote.getNotas_v2());
}
public Notev2 getNoteAt(内部位置){
返回项目(位置);
}
类NoteHolder扩展了RecyclerView.ViewHolder{
文本视图nTitle、NLOCION、nOpen、NOTAS;
额定杆非标准杆;
公共票据持有人(查看项目视图){
超级(项目视图);
nTitle=itemView.findViewById(R.id.textview\u title);
nLocation=itemView.findviewbyd(R.id.textview\u位置);
nStars=itemView.findViewById(R.id.ratingbar\U优先级);
nOpen=itemView.findviewbyd(R.id.textview\u openinghours);
nnoas=itemView.findviewbyd(R.id.textview\u notas);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int position=getAdapterPosition();
if(侦听器!=null&&position!=RecyclerView.NO\u位置){
onItemClick(getItem(position));
}
}
});
}
}
公共接口侦听器{
无效。单击(注释v2注释);
}
公共void setOnItemClickListener(OnItemClickListener侦听器){
this.listener=listener;
}
}
如果你能读到这里,非常感谢。
欢迎一切帮助
经过多次调查,我终于找到了我问题的答案。关键是根据需要创建新的dao查询来过滤信息。
这是我的更新说明
@Dao
公共接口NoteDao{
@镶嵌
public interface NoteDao {
@Insert
void insert(Notev2 note);
@Update
void update(Notev2 note);
@Delete
void delete(Notev2 note);
@Query("DELETE FROM note_table")
void deleteAllNotes();
@Query("SELECT note_table.*, counter.count FROM note_table LEFT JOIN (SELECT note_table.location, count(note_table.location) as count FROM note_table GROUP BY note_table.location) counter ON counter.location = note_table.location ORDER BY counter.count DESC")
LiveData<List<Notev2>> getAllNotes();
}
public class ListFragment extends Fragment {
public static final int ADD_NOTE_REQUEST = 1;
public static final int EDIT_NOTE_REQUEST = 2;
private NoteViewModel noteViewModel;
private ListViewModel listViewModel;
RecyclerView recyclerView_1;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
listViewModel =
ViewModelProviders.of(this).get(ListViewModel.class);
View root = inflater.inflate(R.layout.fragment_list, container, false);
final TextView textView = root.findViewById(R.id.text_list);
listViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
recyclerView_1 = root.findViewById(R.id.recycler_view_list_1);
recyclerView_1.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView_1.setHasFixedSize(true);
final NoteAdapter nadapter = new NoteAdapter();
recyclerView_1.setAdapter(nadapter);
noteViewModel = ViewModelProviders.of(this).get(NoteViewModel.class);
noteViewModel.getAllNotes().observe(getActivity(), new Observer<List<Notev2>>() {
@Override
public void onChanged(List<Notev2> notev2s) {
nadapter.submitList(notev2s);
}
});
nadapter.setOnItemClickListener(new NoteAdapter.OnItemClickListener() {
@Override
public void onItemClick(Notev2 note) {
Intent intent = new Intent(getActivity(), Nota.class);
intent.putExtra(Nota.EXTRA_ID, note.getId());
intent.putExtra(Nota.EXTRA_TITLE, note.getTitle_v2());
intent.putExtra(Nota.EXTRA_LOCATION, note.getLocation_v2());
intent.putExtra(Nota.EXTRA_STARS, note.getStars_v2());
intent.putExtra(Nota.EXTRA_OPEN_1, note.getOpening_hours_1_v2());
intent.putExtra(Nota.EXTRA_OPEN_2, note.getOpening_hours_2_v2());
intent.putExtra(Nota.EXTRA_OPEN_3, note.getOpening_hours_3_v2());
intent.putExtra(Nota.EXTRA_NOTAS, note.getNotas_v2());
startActivityForResult(intent, EDIT_NOTE_REQUEST);
}
});
final ToggleButton swap = (ToggleButton) root.findViewById(R.id.toggle_stars_location);
swap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (swap.isChecked()) {
swap.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
swap.setButtonDrawable(R.drawable.iswap_v2);
//noteViewModel.sortByStars();
nadapter.notifyDataSetChanged();
}
}
});
return root;
}
@Override
public void onViewCreated(View view , @Nullable Bundle savedInstanceState) {
Button button_add_nota = (Button) getView().findViewById(R.id.button_nota);
button_add_nota.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), Nota.class);
startActivityForResult(intent, ADD_NOTE_REQUEST);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_NOTE_REQUEST && resultCode == MainActivity.RESULT_OK) {
String title = data.getStringExtra(Nota.EXTRA_TITLE);
String location = data.getStringExtra(Nota.EXTRA_LOCATION);
String stars = data.getStringExtra(Nota.EXTRA_STARS);
String open_1 = data.getStringExtra(Nota.EXTRA_OPEN_1);
String open_2 = data.getStringExtra(Nota.EXTRA_OPEN_2);
String open_3 = data.getStringExtra(Nota.EXTRA_OPEN_3);
String notas = data.getStringExtra(Nota.EXTRA_NOTAS);
Notev2 note = new Notev2(title, location, stars, open_1, open_2, open_3, notas);
noteViewModel.insert(note);
Toast.makeText(getActivity(), "Note saved", Toast.LENGTH_SHORT).show();
} else if (requestCode == EDIT_NOTE_REQUEST && resultCode == MainActivity.RESULT_OK) {
int id = data.getIntExtra(Nota.EXTRA_ID, -1);
if (id == -1) {
Toast.makeText(getActivity(), "Note can't be updated", Toast.LENGTH_SHORT).show();
return;
}
String title = data.getStringExtra(Nota.EXTRA_TITLE);
String location = data.getStringExtra(Nota.EXTRA_LOCATION);
String stars = data.getStringExtra(Nota.EXTRA_STARS);
String open_1 = data.getStringExtra(Nota.EXTRA_OPEN_1);
String open_2 = data.getStringExtra(Nota.EXTRA_OPEN_2);
String open_3 = data.getStringExtra(Nota.EXTRA_OPEN_3);
String notas = data.getStringExtra(Nota.EXTRA_NOTAS);
Notev2 note = new Notev2(title, location, stars, open_1, open_2, open_3, notas);
note.setId(id);
noteViewModel.update(note);
Toast.makeText(getActivity(), "Note updated", Toast.LENGTH_SHORT).show();
} else if (requestCode == EDIT_NOTE_REQUEST && resultCode == MainActivity.RESULT_OK +10) {
int id = data.getIntExtra(Nota.EXTRA_ID, -1);
String title = data.getStringExtra(Nota.EXTRA_TITLE);
String location = data.getStringExtra(Nota.EXTRA_LOCATION);
String stars = data.getStringExtra(Nota.EXTRA_STARS);
String open_1 = data.getStringExtra(Nota.EXTRA_OPEN_1);
String open_2 = data.getStringExtra(Nota.EXTRA_OPEN_2);
String open_3 = data.getStringExtra(Nota.EXTRA_OPEN_3);
String notas = data.getStringExtra(Nota.EXTRA_NOTAS);
Notev2 note = new Notev2(title, location, stars, open_1, open_2, open_3, notas);
note.setId(id);
noteViewModel.delete(note);
} else {
Toast.makeText(getActivity(), "Note not saved", Toast.LENGTH_SHORT).show();
}
}
}
button_save = (Button) findViewById(R.id.button_save);
button_save.setEnabled(true);
button_save.setClickable(true);
button_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveNote();
}
});
EditText edit_new_sight = (EditText) findViewById(R.id.new_sight);
TextView opened_1 = findViewById(R.id.text_opened_1);
TextView opened_2 = findViewById(R.id.text_opened_2);
TextView opened_3 = findViewById(R.id.text_opened_3);
RatingBar priority_bar = (RatingBar) findViewById(R.id.priority_stars);
if (intent.hasExtra(EXTRA_ID)) {
delete_nota.setVisibility(View.VISIBLE);
toolbar_text.setText("Edit Sight");
edit_new_sight.setText(intent.getStringExtra(EXTRA_TITLE));
String slocation = intent.getStringExtra(EXTRA_LOCATION);
if (slocation.contains("zioiu"))
slocation = "";
editLocation.setText(slocation);
priority_bar.setRating(Float.parseFloat(intent.getStringExtra(EXTRA_STARS)));
opened_1.setText(intent.getStringExtra(EXTRA_OPEN_1));
opened_2.setText(intent.getStringExtra(EXTRA_OPEN_2));
opened_3.setText(intent.getStringExtra(EXTRA_OPEN_3));
notas.setText(intent.getStringExtra(EXTRA_NOTAS));
} else {
toolbar_text.setText("New Sight");
}
delete_nota.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openDialog();
}
});
}
private void saveNote() {
EditText noteTitlep = (EditText) findViewById(R.id.new_sight);
EditText noteLocationp = (EditText) findViewById(R.id.new_location);
RatingBar ratingBar = (RatingBar) findViewById(R.id.priority_stars);
String noteStars = String.valueOf(ratingBar.getRating());
String noteTitle = (String) "" + noteTitlep.getText();
if (noteTitle.equals("")) {
Toast toast = Toast.makeText(Nota.this, "Sorry, you need to input new sight!", Toast.LENGTH_LONG);
toast.show();
} else if (noteStars.equals("0.0")) {
Toast toast = Toast.makeText(Nota.this, "Sorry, you need to input stars!", Toast.LENGTH_LONG);
toast.show();
} else {
TextView noteOpen_1p = (TextView) findViewById(R.id.text_opened_1);
TextView noteOpen_2p = (TextView) findViewById(R.id.text_opened_2);
TextView noteOpen_3p = (TextView) findViewById(R.id.text_opened_3);
EditText noteNotasp = (EditText) findViewById(R.id.edit_notes);
String noteLocation = (String) "" + noteLocationp.getText();
String noteOpen_1 = (String) "" + noteOpen_1p.getText();
String noteOpen_2 = (String) "" + noteOpen_2p.getText();
String noteOpen_3 = (String) "" + noteOpen_3p.getText();
String noteNotas = (String) "" + noteNotasp.getText();
if (noteLocation.equals("")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
String currentDateandTime = sdf.format(new Date());
noteLocation = "zioiu" + currentDateandTime;
}
Intent data = new Intent();
data.putExtra(EXTRA_TITLE, noteTitle);
data.putExtra(EXTRA_LOCATION, noteLocation);
data.putExtra(EXTRA_STARS, noteStars);
data.putExtra(EXTRA_OPEN_1, noteOpen_1);
data.putExtra(EXTRA_OPEN_2, noteOpen_2);
data.putExtra(EXTRA_OPEN_3, noteOpen_3);
data.putExtra(EXTRA_NOTAS, noteNotas);
int id = getIntent().getIntExtra(EXTRA_ID, -1);
if (id != -1) {
data.putExtra(EXTRA_ID, id);
}
setResult(RESULT_OK, data);
Toast.makeText(Nota.this, "Sight Saved", Toast.LENGTH_SHORT).show();
finish();
}
public abstract class NoteDatabase_v2 extends RoomDatabase {
private static NoteDatabase_v2 instance;
public abstract NoteDao noteDao();
public static synchronized NoteDatabase_v2 getInstance(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(context.getApplicationContext(),
NoteDatabase_v2.class, "note_database")
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build();
}
return instance;
}
private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
new PopulateDbAsyncTask(instance).execute();
}
};
@NonNull
@Override
protected SupportSQLiteOpenHelper createOpenHelper(DatabaseConfiguration config) {
return null;
}
@NonNull
@Override
protected InvalidationTracker createInvalidationTracker() {
return null;
}
@Override
public void clearAllTables() {
}
private static class PopulateDbAsyncTask extends AsyncTask<Void, Void, Void> {
private NoteDao noteDao;
private PopulateDbAsyncTask(NoteDatabase_v2 db) {
noteDao = db.noteDao();
}
@Override
protected Void doInBackground(Void... voids) {
noteDao.insert(new Notev2("Title 1", "Location 1", "1", "Open_1_1", "Open_2_1", "Open_3_1", "Notas_1"));
noteDao.insert(new Notev2("Title 2", "Location 2", "2", "Open_1_2", "Open_2_2", "Open_3_2", "Notas_2"));
noteDao.insert(new Notev2("Title 3", "Location 3", "3", "Open_1_3", "Open_2_3", "Open_3_3", "Notas_3"));
return null;
}
}
private NoteDao noteDao;
private LiveData<List<Notev2>> allNotes;
private MediatorLiveData<List<Notev2>> medallnotes;
public NoteRepository(Application application) {
NoteDatabase_v2 database = NoteDatabase_v2.getInstance(application);
noteDao = database.noteDao();
allNotes = noteDao.getAllNotes();
}
public void insert(Notev2 note) {
new InsertNoteAsyncTask(noteDao).execute(note);
}
public void update(Notev2 note) {
new UpdateNoteAsyncTask(noteDao).execute(note);
}
public void delete(Notev2 note) {
new DeleteNoteAsyncTask(noteDao).execute(note);
}
public void deleteAllNotes() {
new DeleteAllNotesAsyncTask(noteDao).execute();
}
public MediatorLiveData<List<Notev2>> getAllNotes() {
return (MediatorLiveData<List<Notev2>>) allNotes;
}
private static class InsertNoteAsyncTask extends AsyncTask<Notev2, Void, Void> {
private NoteDao noteDao;
private InsertNoteAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Notev2... notes) {
noteDao.insert(notes[0]);
return null;
}
}
private static class UpdateNoteAsyncTask extends AsyncTask<Notev2, Void, Void> {
private NoteDao noteDao;
private UpdateNoteAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Notev2... notes) {
noteDao.update(notes[0]);
return null;
}
}
private static class DeleteNoteAsyncTask extends AsyncTask<Notev2, Void, Void> {
private NoteDao noteDao;
private DeleteNoteAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Notev2... notes) {
noteDao.delete(notes[0]);
return null;
}
}
private static class DeleteAllNotesAsyncTask extends AsyncTask<Void, Void, Void> {
private NoteDao noteDao;
private DeleteAllNotesAsyncTask(NoteDao noteDao) {
this.noteDao = noteDao;
}
@Override
protected Void doInBackground(Void... voids) {
noteDao.deleteAllNotes();
return null;
}
}
}
@PrimaryKey(autoGenerate = true)
protected int id;
String title;
String location;
String stars;
String opening_hours_1;
String opening_hours_2;
String opening_hours_3;
String notas;
public Notev2(String title, String location, String stars, String opening_hours_1, String opening_hours_2,
String opening_hours_3, String notas) {
this.title = title;
this.location = location;
this.stars = stars;
this.opening_hours_1 = opening_hours_1;
this.opening_hours_2 = opening_hours_2;
this.opening_hours_3 = opening_hours_3;
this.notas = notas;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public String getTitle_v2() {
return title;
}
public String getLocation_v2() {
return location;
}
public String getStars_v2() {
return stars;
}
public String getOpening_hours_1_v2() {
return opening_hours_1;
}
public String getOpening_hours_2_v2() {
return opening_hours_2;
}
public String getOpening_hours_3_v2() {
return opening_hours_3;
}
public String getNotas_v2() {
return notas;
}
}
public class NoteViewModel extends AndroidViewModel {
private NoteRepository repository;
private LiveData<List<Notev2>> allNotes;
public NoteViewModel(@NonNull Application application) {
super(application);
repository = new NoteRepository(application);
allNotes = repository.getAllNotes();
}
public void insert(Notev2 note) {
repository.insert(note);
}
public void update(Notev2 note) {
repository.update(note);
}
public void delete(Notev2 note) {
repository.delete(note);
}
public LiveData<List<Notev2>> getAllNotes() {
return allNotes;
}
public void sortByStars() {
Collections.sort((List<Notev2>) allNotes, ByStars);
}
public Comparator<Notev2> ByStars = new Comparator<Notev2>() {
@Override
public int compare(Notev2 o1, Notev2 o2) {
return Integer.valueOf(o1.stars).compareTo(Integer.valueOf(o2.stars));
}
};
}
public class NoteAdapter extends ListAdapter<Notev2, NoteAdapter.NoteHolder> {
private OnItemClickListener listener;
public NoteAdapter() {
super(DIFF_CALLBACK);
}
private static final DiffUtil.ItemCallback<Notev2> DIFF_CALLBACK = new DiffUtil.ItemCallback<Notev2>() {
@Override
public boolean areItemsTheSame(Notev2 oldItem, Notev2 newItem) {
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(Notev2 oldItem, Notev2 newItem) {
return oldItem.getTitle_v2().equals(newItem.getTitle_v2()) &&
oldItem.getLocation_v2().equals(newItem.getLocation_v2()) &&
oldItem.getStars_v2().equals(newItem.getStars_v2()) &&
oldItem.getOpening_hours_1_v2().equals(newItem.getOpening_hours_1_v2()) &&
oldItem.getOpening_hours_2_v2().equals(newItem.getOpening_hours_2_v2()) &&
oldItem.getOpening_hours_3_v2().equals(newItem.getOpening_hours_3_v2()) &&
oldItem.getNotas_v2().equals(newItem.getNotas_v2());
}
};
@NonNull
@Override
public NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cardview_list_1, parent, false);
return new NoteHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull NoteHolder holder, int position) {
Notev2 currentNote = getItem(position);
holder.nTitle.setText(currentNote.getTitle_v2());
String slocation = "" + currentNote.getLocation_v2();
if (slocation.contains("zioiu"))
slocation = "";
holder.nLocation.setText(slocation);
Float numStars = Float.parseFloat(currentNote.getStars_v2());
holder.nStars.setRating(numStars);
holder.nOpen.setText(new StringBuilder().append(currentNote.getOpening_hours_1_v2()).append(currentNote.getOpening_hours_2_v2()).append(currentNote.getOpening_hours_3_v2()).toString());
holder.nNotas.setText(currentNote.getNotas_v2());
}
public Notev2 getNoteAt(int position) {
return getItem(position);
}
class NoteHolder extends RecyclerView.ViewHolder {
TextView nTitle,nLocation,nOpen,nNotas;
RatingBar nStars;
public NoteHolder(View itemView) {
super(itemView);
nTitle = itemView.findViewById(R.id.textview_title);
nLocation = itemView.findViewById(R.id.textview_location);
nStars = itemView.findViewById(R.id.ratingbar_priority);
nOpen = itemView.findViewById(R.id.textview_openinghours);
nNotas = itemView.findViewById(R.id.textview_notas);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (listener != null && position != RecyclerView.NO_POSITION) {
listener.onItemClick(getItem(position));
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(Notev2 note);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}
@Dao
public interface NoteDao {
@Insert
void insert(Notev2 note);
@Update
void update(Notev2 note);
@Delete
void delete(Notev2 note);
@Query("DELETE FROM note_table")
void deleteAllNotes();
@Query("SELECT note_table.*, counter.count FROM note_table LEFT JOIN (SELECT note_table.location, count(note_table.location) as count FROM note_table GROUP BY note_table.location) counter ON counter.location = note_table.location ORDER BY counter.count DESC, stars DESC")
LiveData<List<Notev2>> getAllNotes();
@Query("SELECT note_table.*, counter.count FROM note_table LEFT JOIN (SELECT note_table.location, count(note_table.location) as count FROM note_table GROUP BY note_table.location) counter ON counter.location = note_table.location ORDER BY stars DESC, counter.count DESC")
LiveData<List<Notev2>> getAllNotesStars();
//@Query("SELECT location, count(location) FROM note_table GROUP BY location ORDER BY count(location) DESC ")
//LiveData<List<String>> getAllLocations();
}