使用从 SQLite 概括的数据填充 RecyclerView/ListView
Posted
技术标签:
【中文标题】使用从 SQLite 概括的数据填充 RecyclerView/ListView【英文标题】:Populate RecyclerView/ListView with data generalized from SQLite 【发布时间】:2019-07-19 01:27:39 【问题描述】:我想用来自SQLite
ItemDB
的数据填充我的RecyclerView
/ListView
...而且我还想概括所有数据,例如:
我的数据(在数据库中,标签和金额列):
交通 - 100 美元 交通 - 500 美元 食物 - 300 美元 纸币 - 1000 美元 纸币 - 1600 美元RecyclerView
/ListView
中将出现的内容只有 3 项:Transportation、Food 和 Bills..Transportation 的 2 值与 Bills 一样被添加/组合为一个。
如何通过SQLite
填充我的RecyclerView
/ListView
并执行我想要执行的验证/方法??
图表片段的XML文件:这里我将listView放在pichart下方。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:background="#f6f6f6"
tools:context=".Charts">
<View
android:id="@+id/view"
android:layout_
android:layout_
android:background="@color/pastelPink"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView18"
android:layout_
android:layout_
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
android:fontFamily="@font/montserrat"
android:text="Distribution Chart"
android:textColor="#fefefe"
android:textSize="25dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/view"
app:layout_constraintEnd_toEndOf="@+id/view"
app:layout_constraintStart_toStartOf="@+id/view"
app:layout_constraintTop_toTopOf="@+id/view" />
<com.razerdp.widget.animatedpieview.AnimatedPieView
android:id="@+id/animatedPieChart"
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/textView6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view" />
<TextView
android:id="@+id/textView6"
android:layout_
android:layout_
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="152dp"
android:fontFamily="@font/montserrat"
android:text="Data tablehere (Expenses okung ano man andito sa baba)"
android:textColor="#242a2c"
android:textSize="20dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
图表片段的Java代码:我将放置列表视图的Java代码
package com.example.admin.test2;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import com.razerdp.widget.animatedpieview.AnimatedPieView;
import com.razerdp.widget.animatedpieview.AnimatedPieViewConfig;
import com.razerdp.widget.animatedpieview.data.SimplePieInfo;
public class Charts extends Fragment
AnimatedPieView mAnimatedPieView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view = inflater.inflate(R.layout.fragment_charts, container, false);
mAnimatedPieView = view.findViewById(R.id.animatedPieChart);
drawPie();
return view;
public void drawPie()
AnimatedPieViewConfig config = new AnimatedPieViewConfig();
config.startAngle(-90)// Starting angle offset
.addData(new SimplePieInfo(30, Color.parseColor("#77dd77"), "Sample Data to"))//Data (bean that implements the IPieInfo interface)
.addData(new SimplePieInfo(18.0f, Color.parseColor("#ff6961"), "Sample Data ulet")).drawText(true)
.duration(3000);// draw pie animation duration
config.floatShadowRadius(18f);
config.floatUpDuration(500);
config.interpolator(new DecelerateInterpolator(4f));
// The following two sentences can be replace directly 'mAnimatedPieView.start (config); '
mAnimatedPieView.applyConfig(config);
mAnimatedPieView.start();
项目数据库助手
package com.example.admin.test2;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.admin.test2.ItemContract.*;
public class ItemDBHelper extends SQLiteOpenHelper
public static final String DATABASE_NAME = "itemlist.db";
public static final int DATABASE_VERSION = 4;
public ItemDBHelper(Context context)
super(context, DATABASE_NAME, null, DATABASE_VERSION);
@Override
public void onCreate(SQLiteDatabase db)
final String SQL_CREATE_ITEMLIST_TABLE = "CREATE TABLE " + ItemEntry.TABLE_NAME + " (" +
ItemEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
ItemEntry.COLUMN_LABEL + " TEXT NOT NULL, " +
ItemEntry.COLUMN_DETAIL + " TEXT, " +
ItemEntry.COLUMN_AMOUNT + " INTEGER NOT NULL, " +
ItemEntry.COLUMN_DATE + " TEXT " +
");";
db.execSQL(SQL_CREATE_ITEMLIST_TABLE);
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
db.execSQL("DROP TABLE IF EXISTS " + ItemEntry.TABLE_NAME);
onCreate(db);
项目合同
package com.example.admin.test2;
import android.provider.BaseColumns;
public class ItemContract
private ItemContract()
public static final class ItemEntry implements BaseColumns
public static final String TABLE_NAME = "items";
public static final String COLUMN_LABEL = "label";
public static final String COLUMN_AMOUNT = "amount";
public static final String COLUMN_DETAIL = "detail";
public static final String COLUMN_DATE = "date";
【问题讨论】:
【参考方案1】:这里有一些高级想法可以帮助您入门。
-
将下面的 SQL 转换为 SQLite 选择方法以获取所需的数据。
实现适配器填充 RecyclerView/ListView
选择标签,SUM(金额) 从项目 按标签分组
我还建议您使用 Room 库,它极大地简化了 SQLite 的使用。 Room Persistence Library
【讨论】:
ummm.. 我不知道如何在 android studio.. 和适配器中实现这个 SQLite 查询.. 我只是一个初学者..以上是关于使用从 SQLite 概括的数据填充 RecyclerView/ListView的主要内容,如果未能解决你的问题,请参考以下文章
Android 从 SQLite 数据库填充自定义 ListView
如何使用从我的 SQLite 数据库中检索到的数据填充 tkinter 下拉框?
AnKo SQLite:从数据库中异步填充listview?