【问题标题】:Populate recycler view with data from local sqllite database in android使用 android 中本地 sqlite 数据库中的数据填充 recyclerview
【发布时间】:2015-09-20 08:42:20
【问题描述】:

我怎样才能将本地数据库中的循环数据输入到 android 的回收器视图中。

我有三个班,

ItemData.java

public class NatureItem {
    private String title;
    private int imageUrl;
    public NatureItem(String title,int imageUrl){
    this.title = title;
    this.imageUrl = imageUrl;
    }
    public String getTitle() {
    return title;
    }
    public void setTitle(String title) {
    this.title = title;
    }
    public int getImageUrl() {
    return imageUrl;
    }
    public void setImageUrl(int imageUrl) {
    this.imageUrl = imageUrl;
    }
}



CardAdapter.java

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

     private NatureItem[] itemsData;

     public CardAdapter(NatureItem[] itemsData) {
     this.itemsData = itemsData;
     }

    // Create new views (invoked by the layout manager)
    @Override
    public CardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View itemLayoutView = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.list_cardview_activity, null);

        // create ViewHolder

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        // - get data from your itemsData at this position
        // - replace the contents of the view with that itemsData
        viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
        viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());


    }

    // inner class to hold a reference to each item of RecyclerView
    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView txtViewTitle;
        public ImageView imgViewIcon;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.blog_content);
            imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.imageView);
        }
    }


    // Return the size of your itemsData (invoked by the layout manager)
    @Override
    public int getItemCount() {
         return itemsData.length; 
    }
}



MainActivity.java

     NatureItem itemsData[] ={ 
                new NatureItem("imageName",R.drawable.image2),
                new NatureItem("imageName2",R.drawable.image2)              
        };

    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);       
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    mAdapter = new CardAdapter(itemsData);
    recyclerView.setAdapter(mAdapter);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

使用上面的代码,我可以用上面数组中的信息(itemsData)填充我的回收视图。 现在,我希望能够使用下面的数据库处理程序使用本地 sql 数据库中的数据填充我的回收视图;

public class DatabaseHandler extends SQLiteOpenHelper {


    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
                + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_FIRSTNAME + " TEXT,"
                + KEY_LASTNAME + " TEXT,"
                + KEY_EMAIL + " TEXT UNIQUE,"
                + KEY_UID + " TEXT,"
                + KEY_CREATED_AT + " TEXT" + ")";
        db.execSQL(CREATE_LOGIN_TABLE);
    }



    /**
     * Getting user data from database
     * */
    public Cursor  getUserDetails(){
        HashMap<String,String> user = new HashMap<String,String>();
             String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

             SQLiteDatabase db = this.getReadableDatabase();
             Cursor cursor = db.rawQuery(selectQuery, null);
            if (cursor!=null){
                 user.put("fname", cursor.getString(1));
                 user.put("lname", cursor.getString(2));
                 user.put("email", cursor.getString(3));
                 user.put("uid", cursor.getString(4));
                 user.put("created_at", cursor.getString(5));
                cursor.moveToNext();
            }
            return cursor;
    }


    /**
     * Getting user status
     * return true if rows are there in table
     * */
    public int getRowCount() {
        String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        int rowCount = cursor.getCount();
        db.close();
        cursor.close();

        // return row count
        return rowCount;
    }


}

请问如何使用来自数据库处理程序的数据填充我的回收视图。如果有人可以提供帮助,我将不胜感激。提前致谢

【问题讨论】:

标签: android sqlite android-recyclerview


【解决方案1】:

我建议使用 Android 加载器管理器,它非常适合此目的并且基于 android。

一个很好的例子可以在这里找到:

Android Docs Link

External link

编辑:在这个POST 你可以找到你要找的东西。 将它与您的活动/片段中的加载器管理器结合起来,您就可以开始了。 请记住使用 OnLoadFinished 中的新光标调用 adapter.switchCursor()

希望这会对您有所帮助。

【讨论】:

  • 感谢您的回复。我知道使用加载器管理器,但我的问题是如何使用回收器视图来显示数据库中的项目。我想知道它的实现。如果有任何链接或教程来解决我的问题,我将不胜感激。谢谢
  • 请我如何以及在哪里将我的数据库处理程序引用到 recycleview 适配器中。谢谢
  • 嗨,你有没有让 cursoradapter 和 loadermanager 工作来填充你的 recyclerview?如果是这样,您可以发布您的工作示例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多