2015-07-08 4 views
4

Каков предпочтительный способ заполнения RecyclerView и отслеживания изменений данных с помощью ActiveAndroid ORM?Android RecyclerView + ActiveAndroid

У меня есть asked a question на эту тему недавно. Но это слишком многословно, и люди такие ленивые, что кто-то почти не читал его до конца.

Суть его: есть ли у кого-нибудь рабочий пример RecyclerView, заполненный базой данных через ActiveAndroid?

ответ

0

Я использовал эту библиотеку один раз, но с 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; 
      } 
     } 
    } 

Здесь я предполагаю, что вы уже создали и хранятся значения в базе данных, так как вопрос задать только для заполнения из базы данных.

Я не тестировал его, но думаю, он должен работать.

+0

Вопрос заключается не только в заполнении 'RecyclerView' из базы данных, но и о привязке представления к набору данных и наблюдении за изменениями. Поэтому, когда изменения происходят в наборе данных, представление автоматически уведомляется о них. – naXa

0

Образец может быть использован для реализации этого. Используйте BroadcastReceiver для уведомления о вашей деятельности всякий раз, когда вы вносите изменения в свою базу данных (просто отправляйте явное намерение вашей деятельности и реализуйте activity.onNewIntent()).

Используйте LocalBroadcastManager для отправкиBroadCast на свой BroadCastReceiver, когда вы закончите, добавьте свои изменения в базу данных. Надеюсь, что эта помощь.

Смежные вопросы