一、效果展示
账户名为张志伟,登录
查看账目
这是数据库的数据
二、总结
学习了BaseAdapter适配器来根据查询到的数据条数显示表单的行数,实现代码和布局的联动。
三、部分原码
QueryAllActivity.java
package com.example.familybook; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ScrollView; import android.widget.TextView; import androidx.annotation.Nullable; import com.example.familybook.dao.BillDaoImpl; import com.example.familybook.dao.IBillDao; import com.example.familybook.entity.Bill; import com.example.familybook.utils.ShowBillsAdapter; import com.example.familybook.utils.ViewHolder; import java.util.List; public class QueryAllActivity extends Activity { private String mUsername; private String TAG="QueryAllActivity"; private List <Bill> mShowBills; private List <ViewHolder> mViewHolder; private IBillDao mIBillDao; private SQLiteOpenHelper mBillDatabaseHelper; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); this.setTitle("总览账目信息"); //获取登录者的用户名 Intent intent =getIntent(); mUsername =intent.getStringExtra("username"); Log.e(TAG,"使用者:"+mUsername); //初始化控件 initView(); //获取表格布局 ListView ShowBillList=(ListView)findViewById(R.id.list_View); //获取从数据库获得的表单 mShowBills=mIBillDao.listAllBill(mUsername); //新建并配置Show ShowBillsAdapter ShowAdapter=new ShowBillsAdapter(mShowBills,this); ShowBillList.setAdapter(ShowAdapter); //添加事件监听 initListener(); } private void initListener() { } private void initView() { mIBillDao =new BillDaoImpl(QueryAllActivity.this); } }
ShowBillsAdapter.java
package com.example.familybook.utils; /** * 这是查看总览账目的列表帮助类 */ import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.familybook.R; import com.example.familybook.entity.Bill; import java.util.List; public class ShowBillsAdapter extends BaseAdapter { private List<Bill> mList; private Context mContext; private LayoutInflater mLayoutInflater; public ShowBillsAdapter(List<Bill> mList, Context mContext) { this.mList = mList; this.mContext = mContext; this.mLayoutInflater = LayoutInflater.from(mContext); } /** * 返回适配器中数据集中的个数 * @return */ @Override public int getCount() { return mList.size(); } /** * 获取数据数据集中与指定索引对应的数据项 * @param position * @return */ @Override public Object getItem(int position) { return mList.get(position); } /** * 获取指定行对应的ID * @param position * @return */ @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView==null){ /** * 将表单的标题与布局中的控件对应起来 */ viewHolder=new ViewHolder(); convertView=mLayoutInflater.inflate(R.layout.activity_queryallbill,null); viewHolder.mBillType=(TextView)convertView.findViewById(R.id.show_bill_type); viewHolder.mBillMoney=(TextView)convertView.findViewById(R.id.show_bill_money); viewHolder.mBillDate=(TextView)convertView.findViewById(R.id.show_bill_date); convertView.setTag(viewHolder); }else { viewHolder=(ViewHolder)convertView.getTag(); } //获取一个bill实体类,将bill的数据封装到表格的内容中 Bill bill=mList.get(position); //这里获取数据返回给布局 viewHolder.mBillType.setText(bill.getType()); viewHolder.mBillMoney.setText(bill.getMoney()); viewHolder.mBillDate.setText(bill.getDate()); return convertView; } }
ViewHolder.java
package com.example.familybook.utils; /** * 这是一个表单标题类 */ import android.widget.TextView; public class ViewHolder { public TextView mBillType; public TextView mBillMoney; public TextView mBillDate; }
activity_list.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:background="@mipmap/queryallbill" android:layout_height="match_parent"> <ListView android:id="@+id/list_View" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </LinearLayout>
activity_queryallbill.xml
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/query_all_bill" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="30dp" android:orientation="vertical" tools:context=".QueryAllActivity" > <TextView android:id="@+id/show_bill_type" android:text="账目类型" android:textSize="30dp" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/show_bill_money" android:layout_width="wrap_content" android:text="账目金额" android:textSize="30dp" android:layout_marginLeft="20dp" android:layout_toRightOf="@+id/show_bill_type" android:layout_height="wrap_content"/> <TextView android:id="@+id/show_bill_date" android:layout_width="wrap_content" android:text="账目日期" android:textSize="30dp" android:layout_marginLeft="20dp" android:layout_toRightOf="@id/show_bill_money" android:layout_height="wrap_content"/> </RelativeLayout> </ScrollView>