Printing Sqlite Entries Into A Listview
Solution 1:
this is the code of getting data from database and insert into Arraylist and insert into arrayAdapter and than display it in listview .
i just done some editing in your existing code.
com.example.rory.dbtest.DBAdapter db = new com.example.rory.dbtest.DBAdapter(this);
db.open();
ArrayList<String> data_list=newArrayList<String>();
ListView lv=(ListView)findViewById(R.id.listView1);
Cursor c = db.getAllRecords();
if (c.moveToFirst())
{
do {
data_list.add(c.getString(0));
DisplayRecord(c);
} while (c.moveToNext());
}
ArrayAdapter<String> aa=newArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, data_list);
lv.setAdapter(aa);
lv - is the object of ListView.
Solution 2:
Create a ListView
. Then provide cursorAdapter
to the ListView
as it's adapter to bind the data in the database to the ListView
.
There are examples in the samples folder of the SDK you downloaded in the project called ApiDemos
.
Solution 3:
You need to have, 1) listview, 2) Object class, 3) Custom Adapter
Here I have just tried to implement as per your requirement. Since I dont have db I did not try to run. The point to is to five you idea. Because listview is widget that we use more frequently in android. This is the best approach as per my knowledge.
Layouts that required,
activity_list.xml :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ListActivity" >
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
row_item.xml :
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="10dp" ><TextViewandroid:id="@+id/Item"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Item" /><TextViewandroid:id="@+id/Litres"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="litres" /></LinearLayout>
ListActivity.java :
publicclassListActivityextendsActivity {
ArrayList<RowData> rowDataArrayList = newArrayList<RowData>();
ListView list;
ListAdapter listAdapter;
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
list = (ListView) findViewById(R.id.list);
listAdapter = newListAdapter(ListActivity.this, rowDataArrayList);
list.setAdapter(listAdapter);
getDataFromDB();
}
@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.list, menu);
returntrue;
}
privatevoidgetDataFromDB() {
rowDataArrayList.clear();
com.example.rory.dbtest.DBAdapterdb=newcom.example.rory.dbtest.DBAdapter(
this);
db.open();
Cursorc= db.getAllRecords();
if (c.moveToFirst()) {
do {
/**
* Set your data in class
*/RowDatarowData=newRowData();
rowData.setId(c.getString(0));
rowData.setItem(c.getString(1));
rowData.setLitres(c.getString(2));
rowDataArrayList.add(rowData);
} while (c.moveToNext());
}
db.close();
/**
* To reflect new data set change in listview
*/
listAdapter.notifyDataSetChanged();
}
}
RowData.java : Model[pojo] class to save data and to bind in custom adapter.
publicclassRowData {
StringId;
StringItem;
StringLitres;
publicStringgetId() {
returnId;
}
publicvoidsetId(String id) {
Id = id;
}
publicStringgetItem() {
returnItem;
}
publicvoidsetItem(String item) {
Item = item;
}
publicStringgetLitres() {
returnLitres;
}
publicvoidsetLitres(String litres) {
this.Litres = litres;
}
}
ListAdapter.java : custom adapter to bind in listview
publicclassListAdapterextendsBaseAdapter {
private Context mContext;
private ArrayList<RowData> rowDataArrayList = newArrayList<RowData>();
publicListAdapter(Context context, ArrayList<RowData> rowData) {
mContext = context;
rowDataArrayList = rowData;
}
@OverridepublicintgetCount() {
returnrowDataArrayList== null ? 0 : rowDataArrayList.size();
}
@Overridepublic Object getItem(int position) {
returnnull;
}
@OverridepubliclonggetItemId(int position) {
return0;
}
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {
Viewview=null;
if (convertView == null) {
Holderholder=newHolder();
view = View.inflate(mContext, R.layout.row_item, null);
holder.tvtItem = (TextView) view.findViewById(R.id.Item);
holder.tvtLitres = (TextView) view.findViewById(R.id.Litres);
view.setTag(holder);
} else {
view = convertView;
}
Holderholder= (Holder) view.getTag();
holder.tvtItem.setText(rowDataArrayList.get(position).getItem());
holder.tvtLitres.setText(rowDataArrayList.get(position).getLitres());
return view;
}
classHolder {
TextView tvtItem;
TextView tvtLitres;
}
}
publicclassListAdapterextendsBaseAdapter {
private Context mContext;
private ArrayList<RowData> rowDataArrayList = newArrayList<RowData>();
publicListAdapter(Context context, ArrayList<RowData> rowData) {
mContext = context;
rowDataArrayList = rowData;
}
@OverridepublicintgetCount() {
returnrowDataArrayList== null ? 0 : rowDataArrayList.size();
}
@Overridepublic Object getItem(int position) {
returnnull;
}
@OverridepubliclonggetItemId(int position) {
return0;
}
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {
Viewview=null;
if (convertView == null) {
Holderholder=newHolder();
view = View.inflate(mContext, R.layout.row_item, null);
holder.tvtItem = (TextView) view.findViewById(R.id.Item);
holder.tvtLitres = (TextView) view.findViewById(R.id.Litres);
view.setTag(holder);
} else {
view = convertView;
}
Holderholder= (Holder) view.getTag();
holder.tvtItem.setText(rowDataArrayList.get(position).getItem());
holder.tvtLitres.setText(rowDataArrayList.get(position).getLitres());
return view;
}
classHolder {
TextView tvtItem;
TextView tvtLitres;
}
}
Post a Comment for "Printing Sqlite Entries Into A Listview"