Каков предпочтительный способ заполнения RecyclerView и отслеживания изменений данных с помощью ActiveAndroid ORM?
Я недавно задал вопрос по этой теме. Но это слишком многословно, и люди настолько ленивы, что кто-то почти не читал его до конца.
Сама его суть: есть ли у кого-нибудь рабочий пример RecyclerView, заполненный из базы данных через ActiveAndroid?
Я использовал эту библиотеку один раз, но с ListView
. Я думаю, что этот код должен работать с RecyclerView
:
/* The database */ @Table(name = "Person") public class Person extends Model { @Column(name = "Name") public String name; @Column(name = "Age") public int age; } /* Your MainActivity */ List<Person> list = new ArrayList<>(); private RecyclerView rv; /* Activity onCreate */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); list = getList(15); rv = (RecyclerView) findViewById(R.id.recycler_view); rv.setLayoutManager(new LinearLayoutManager(this)); rv.setAdapter(new Adapter()); } private List<Person> getList(int age){ return new Select() .from(Person.class) .where("Age = ?", age) .orderBy(/* order you like */) .executeSingle(); } private class Adapter extends RecyclerView.Adapter<Adapter.Holder> { @Override public Adapter onCreateViewHolder(ViewGroup parent, int viewType) { // you should inflate the layout you want be laid in every row of the recycler view. Im just inflating a text view for convinence return new Holder(LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false)); } @Override public void onBindViewHolder(Holder holder, int position) { // assign values to all view in the holder. holder.tv.setText(list.get(position).name); } @Override public int getItemCount() { return list.size(); } public class Holder extends RecyclerView.ViewHolder { // here you load all the view in your layout TextView tv; public Holder(View itemView) { super(itemView); tv = (TextView) itemView; } } }
Здесь я предполагаю, что вы уже создали и сохранили значения в базе данных, поскольку вопрос требует только заполнить из базы данных.
Я не тестировал его, но думаю, он должен работать.
Для реализации этого может быть использован шаблон. Используйте BroadcastReceiver, чтобы уведомлять о своей деятельности всякий раз, когда вы вносите изменения в свою базу данных (просто отправляйте явное намерение вашей деятельности и реализуйте activity.onNewIntent ()).
Используйте LocalBroadcastManager для отправкиBroadCast в свой BroadCastReceiver, когда вы закончите добавлять свои изменения в базу данных. Надеюсь, эта помощь.