Как отобразить данные внешней базы данных SQLite через Recyclerview в приложении для Android?
В последние несколько дней я узнал, как создать базу данных SQLite и отобразить ее через RecyclerView с помощью SQLiteOpenHelper. в. И да, благодаря силе Google и Stack-overflow, и я это очень хорошо выучил. Тем не менее, у меня возникли проблемы с отображением данных внешней базы данных через RecyclerView. В последние два дня я много искал, и большинство из них собирается импортировать внешнюю базу данных в приложение, используя папку "Assets" и SQLiteAssetsHelper. Не нашел ничего, что объясняло бы, как представлять данные через RecyclerView, который был импортирован.дайте мне несколько рекомендаций по отображению данных внешней базы данных SQLite через RecyclerView? Любая ссылка или любая книга или любая ссылка по этому поводу будут оценены. Спасибо заранее.
1 ответ
В результате вашего взаимодействия с базой данных, use должен получить набор данных (массив или коллекцию типа ArrayList). Как я понял из вашего объяснения, вы теперь знаете, как его получить, но не знаете, как передать его в свой recyclerView. Таким образом, вам нужен адаптер, чтобы сделать это. Адаптер - это класс, который будет брать каждый объект из набора данных массива и создавать (раздувать) из его данных один элемент recyclerView. После обработки всех элементов массива адаптер создаст список элементов, таким образом, он заполнит ваше представление переработчика данными, вот фрагмент кода, который может помочь вам понять, как он работает:
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] mDataset;
// Provide a reference to the views for each data item
// Complex data items may need more than one view per item, and
// you provide access to all the views for a data item in a view holder
public static class MyViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public TextView textView;
public MyViewHolder(TextView v) {
super(v);
textView = v;
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
...
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
holder.textView.setText(mDataset[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}
public class MyActivity extends Activity {
private RecyclerView recyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
recyclerView.setHasFixedSize(true);
// use a linear layout manager
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
// specify an adapter (see also next example)
mAdapter = new MyAdapter(myDataset);
recyclerView.setAdapter(mAdapter);
}
// ...
}