Как отобразить данные внешней базы данных SQLite через Recyclerview в приложении для Android? - PullRequest
0 голосов
/ 02 апреля 2019

За последние несколько дней я узнал , как создавать базу данных SQLite и отображать ее через RecyclerView с помощью SQLiteOpenHelper. in.И да, благодаря силе Google и Stack-overflow, и я это очень хорошо выучил.Тем не менее, у меня возникли проблемы с отображением данных внешней базы данных через RecyclerView.В последние два дня я много искал, и большинство из них собирается импортировать внешнюю базу данных в приложение, используя папку «Assets» и SQLiteAssetsHelper. Не нашли ничего, что объясняло бы, как представлять данные через импортированный RecyclerView. Итак, Не могли бы вы дать мне несколько рекомендаций по отображению данных внешней базы данных SQLite через RecyclerView? Любая ссылка, любая книга или любая ссылка на это будут оценены. Заранее спасибо.

1 Ответ

0 голосов
/ 02 апреля 2019

В результате вашего взаимодействия с базой данных, 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);
    }
    // ...
}
...