家庭小账本——适配器的编写与测试

Posted 2940500426yingxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了家庭小账本——适配器的编写与测试相关的知识,希望对你有一定的参考价值。

    今天开始根据网络教学进行家庭小账本的编写,然后进行测试,这是第一次编写较为完善全面的android的程序,而且作为Android的初学者,自我感觉这次编写非常的慢,有许多的方面都没有比较满意的进行,而且这次综合的知识的也不少。

    先进行界面的设计,

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     app:layout_behavior="@string/appbar_scrolling_view_behavior"
 8     tools:context=".MainActivity"
 9     tools:showIn="@layout/activity_main">
10 
11     <ListView
12         android:id="@+id/lv_main"
13         android:layout_width="match_parent"
14         android:layout_height="match_parent" />
15 
16 </androidx.constraintlayout.widget.ConstraintLayout>
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical" android:layout_width="match_parent"
 4     android:layout_height="80dp">
 5 
 6     <TextView
 7         android:id="@+id/tv_title"
 8         android:layout_marginLeft="10dp"
 9         android:gravity="center"
10         android:singleLine="true"
11         android:textSize="35sp"
12         android:ellipsize="marquee"
13         android:text="CostTitle"
14         android:layout_width="100dp"
15         android:layout_height="85dp"/>
16     <TextView
17         android:id="@+id/tv_date"
18         android:text="costdate"
19         android:layout_width="wrap_content"
20         android:gravity="center"
21         android:textSize="20sp"
22         android:layout_marginLeft="15dp"
23         android:layout_toRightOf="@id/tv_title"
24         android:layout_height="80dp"/>
25     <TextView
26         android:id="@+id/tv_cost"
27         android:gravity="center"
28         android:layout_alignParentRight="true"
29         android:layout_marginRight="20dp"
30         android:textSize="30sp"
31         android:text="30"
32         android:layout_width="wrap_content"
33         android:layout_height="80dp"/>
34 </RelativeLayout>

设置了一个相对布局,共有三列,分别为日期,金额,日期。

 

然后添加一个Java类CostListAdapter,并添加内容

 1 package com.example.familyledger;
 2 
 3 import android.content.Context;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.BaseAdapter;
 8 import android.widget.TextView;
 9 
10 import java.util.List;
11 
12 public class CostListAdapter extends BaseAdapter {
13     private List<CostBean> mList;
14     private Context mContext;
15     private LayoutInflater mLayoutInflater;
16 
17     public CostListAdapter(Context context,List<CostBean>list){
18         mContext=context;
19         mList=list;
20         mLayoutInflater=LayoutInflater.from(context);
21     }
22     @Override
23     public int getCount() {
24         return mList.size();
25     }
26 
27     @Override
28     public Object getItem(int position) {
29         return mList.get(position);
30     }
31 
32     @Override
33     public long getItemId(int position) {
34         return position;
35     }
36 
37     @Override
38     public View getView(int position, View convertView, ViewGroup parent) {
39         ViewHolder viewHolder;
40         if(convertView==null)
41         {
42             viewHolder=new ViewHolder();
43             convertView=mLayoutInflater.inflate(R.layout.list_item,null);
44             viewHolder.mTvCostTitle=(TextView)convertView.findViewById(R.id.tv_title);
45             viewHolder.mTvCostDate=(TextView)convertView.findViewById(R.id.tv_date);
46             viewHolder.mtvCostMoney=(TextView)convertView.findViewById(R.id.tv_cost);
47             convertView.setTag(viewHolder);
48         }else
49         {
50             viewHolder=(ViewHolder)convertView.getTag();
51         }
52         CostBean bean=mList.get(position);
53         viewHolder.mTvCostTitle.setText(bean.costTitle);
54         viewHolder.mtvCostMoney.setText(bean.costMoney);
55         viewHolder.mTvCostDate.setText(bean.costDate);
56         return convertView;
57     }
58     public static class ViewHolder{
59         public TextView mTvCostTitle;
60         public TextView mTvCostDate;
61         public TextView mtvCostMoney;
62     }
63 }

最后在添加一个Bean类

1 package com.example.familyledger;
2 
3 public class CostBean {
4     public String costTitle;
5     public String costDate;
6     public String costMoney;
7 }

最后在MainActivity中设计主函数

 1 package com.example.familyledger;
 2 
 3 import android.os.Bundle;
 4 
 5 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 6 import com.google.android.material.snackbar.Snackbar;
 7 
 8 import androidx.appcompat.app.AppCompatActivity;
 9 import androidx.appcompat.widget.Toolbar;
10 
11 import android.view.View;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.widget.ListView;
15 
16 import java.util.ArrayList;
17 import java.util.List;
18 
19 public class MainActivity extends AppCompatActivity {
20 
21     private List<CostBean> mCostListBean;
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_main);
26         Toolbar toolbar = findViewById(R.id.toolbar);
27         setSupportActionBar(toolbar);
28 
29         mCostListBean=new ArrayList<>();
30         ListView costList=(ListView)findViewById(R.id.lv_main);
31         initCostdata();
32         costList.setAdapter(new CostListAdapter(this,mCostListBean));
33 
34         FloatingActionButton fab = findViewById(R.id.fab);
35         fab.setOnClickListener(new View.OnClickListener() {
36             @Override
37             public void onClick(View view) {
38                 Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
39                         .setAction("Action", null).show();
40             }
41         });
42     }
43 
44     private void initCostdata() {
45         for (int i=0;i<6;i++) {
46             CostBean costBean1=new CostBean();
47             costBean1.costDate="11-11";
48             costBean1.costMoney="20";
49             costBean1.costTitle="mock";
50             mCostListBean.add(costBean1);
51         }
52     }
53 
54     @Override
55     public boolean onCreateOptionsMenu(Menu menu) {
56         // Inflate the menu; this adds items to the action bar if it is present.
57         getMenuInflater().inflate(R.menu.menu_main, menu);
58         return true;
59     }
60 
61     @Override
62     public boolean onOptionsItemSelected(MenuItem item) {
63         // Handle action bar item clicks here. The action bar will
64         // automatically handle clicks on the Home/Up button, so long
65         // as you specify a parent activity in AndroidManifest.xml.
66         int id = item.getItemId();
67 
68         //noinspection SimplifiableIfStatement
69         if (id == R.id.action_settings) {
70             return true;
71         }
72 
73         return super.onOptionsItemSelected(item);
74     }
75 }

最后显示测试画面,有五行的相同自定义的数据

技术图片

 

以上是关于家庭小账本——适配器的编写与测试的主要内容,如果未能解决你的问题,请参考以下文章

家庭记账小账本

家庭记账小账本

家庭记账小账本

家庭记账小账本Android studio

寒假家庭小账本——android studio安装及配置

关于家庭小账本软件的设计一