安卓期末复习
1、项目初步(Test2)
1.1、部署启动类
在 main 中创建一个 activity
将 xml 文件改为 LinearLayout
线性布局
指定主启动类
1.2、在主启动类中加入一个按钮 & Toast消息
(如果在创建 Activity
时没有选择生成对应的 layout
文件)首先在 res
中创建一个 layout
文件夹,在其中新建一个 xml
文件(其为对应的Activity
的layout
文件 )
在其中加入一个按钮
将 layout
文件与本 acitivity
绑定,使用 setContentView
方法
1.3、加入 Menu 菜单
在 res
文件夹中创建 menu
文件夹,并创建 main.xml
加入两个菜单选项
还是在 firstActivity
中创建两个函数第一个将菜单引入到本活动中
第二函数,负责监听菜单的点击操作,并对每个操作做出相应
1.4、(显示)Intent 跳转活动页面
首先创建一个新的 Activity
这次勾选生成 layout
文件
我们将 firstActivity
中的 Button
作为跳转页面的触发器
1.5、 Intent 传递数据
我们在跳转的代码中新增一行 putExtra
,传递
在接受的活动中,显示出来
2、UI 控件(Test3)
2.1、TextView
2.2、Button
见上文
2.3、EditText
输入条
通过按钮,显示输入的内容
2.4、ImageView
图片一般都放在以 drawable
开头的目录下
在 layout
中引入 ImageView
(注意:图片名字不能以数字开头)
绑定按钮的点击事件切换 url
2.5、LinearLayout
3、ListView (Test1)重点!!
3.1、只有一栏的 ListView
xml
文件
主程序
private String[] data = {"233","232","21231","aad22",
"232","21231","aad22","232","21231","aad22",
"232","21231","aad22","232","21231","aad22",
"232","21231","aad22"};
protected void onCreate(Bundle savedInstanceState) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1,data);j
ListView viewById = (ListView) findViewById(R.id.listView1);
viewById.setAdapter(adapter);
}
3.2、ListView 自定义
4、Exam
4.1、bean_Account
package com.example.bean;
public class Account {
private Long id;
private String name;
private Integer balance;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getBalance() {
return balance;
}
public void setBalance(Integer balance) {
this.balance = balance;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", balance=" + balance +
'}';
}
public Account(String name, Integer balance) {
this.name = name;
this.balance = balance;
}
public Account(Long id, String name, Integer balance) {
this.id = id;
this.name = name;
this.balance = balance;
}
}
4.2、dao_AccountDao
package com.example.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.example.bean.Account;
import java.util.ArrayList;
import java.util.List;
public class AccountDao {
private MyHelper myHelper;
public AccountDao(Context context){
// 创建Dao时创建Helper;
Log.d("MyHelper","OnCreateNow");
myHelper = new MyHelper(context);
Log.d("MyHelperafter","OnCreate");
}
// insert
public void insert(Account account){
// 读取数据库对象
SQLiteDatabase db = myHelper.getWritableDatabase();
// 用阿里装载要插入的数据的Map<列名,列的值>
ContentValues values = new ContentValues();
values.put("name",account.getName());
values.put("balance",account.getBalance());
// 向 account 插入 数据
Long id = db.insert("account",null,values);
account.setId(id);
db.close();
}
// delete
public void delete(Long id){
SQLiteDatabase db = myHelper.getWritableDatabase();
db.delete("account","id=?",new String[]{id+""});
// db.execSQL(sql,new String[]{String.valueOf(id)});
db.close();
}
// update
public void update(Account account){
SQLiteDatabase db = myHelper.getWritableDatabase();
ContentValues values=new ContentValues(); //要修改的数据 键值对
values.put("name",account.getName());
values.put("balance",account.getBalance());
db.update("account",values,"id=?",new String[]{ account.getId()+""});
db.close();
}
// get All data
public List<Account> queryAll(){
Log.d("query","all");
SQLiteDatabase db = myHelper.getWritableDatabase();
String sql= "select * from account";
Cursor c = db.rawQuery(sql,null);
List<Account> list = new ArrayList<Account>();
while(c.moveToNext()){
long id = c.getLong(0);
String name = c.getString(1);
int balance = c.getInt(2);
Log.d("query",name);
list.add(new Account(id,name,balance));
}
c.close();
db.close();
Log.d("query",list.isEmpty()==true?"kong":"bukong");
return list;
}
}
4.3、dao_MyHelper
package com.example.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import androidx.annotation.Nullable;
import com.example.bean.Account;
import java.util.ArrayList;
import java.util.List;
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context){
super(context,"product",null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("database","OnCreate");
String sql = "create table account" +
"(" +
"id integer primary key autoincrement," +
"name varchar(20)," +
"balance integer" +
")";
db.execSQL(sql);//id主键,商品名称列,金额列
// ContentValues values = new ContentValues();
// values.put("name","Hoppz");
// values.put("balance",10);
// // 向 account 插入 数据
// db.insert("acount",null,values);
// db.insert("acount",null,values);
// db.insert("acount",null,values);
//
// Cursor c = db.query("account",null,
// null,null,
// null,null,"balance DESC");
// List<Account> list = new ArrayList<Account>();
// while(c.moveToNext()){
// long id = c.getLong(c.getColumnIndex("id"));
// String name = c.getString(1);
// int balance = c.getInt(2);
// list.add(new Account(id,name,balance));
// }
// for(Account it : list){
// Log.d("database",it.getName());
// }
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
4.4 、sqllite_MainActivity
package com.example.sqllite;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.bean.Account;
import com.example.dao.AccountDao;
import java.util.List;
public class MainActivity extends AppCompatActivity {
// 配合适配器的数据集合
private List<Account> list;
// CRUD tool Object
private AccountDao dao;
// 输入姓名的 editor
private EditText nameET;
// 输入金额的 editor
private EditText balanceET;
// 适配器
private MyAdapter adapter;
// listView
private ListView accountLV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化控件
initView();
Log.d("Dao","createPre");
dao = new AccountDao(this);
// 从数据库中查询所有数据
list= dao.queryAll();
for (Account it : list){
Log.d("query",it.getName() + "index");
}
adapter = new MyAdapter();
accountLV.setAdapter(adapter);
}
private void initView()
{
accountLV = (ListView) findViewById(R.id.accountLV);
nameET = (EditText) findViewById(R.id.nameET);
balanceET = (EditText) findViewById(R.id.balanceET);
}
public void add(View v){
String name = nameET.getText().toString().trim();
String balance = balanceET.getText().toString().trim();
Log.d("add",name);
Log.d("add",balance);
if( "".equals(name) || "".equals(balance) ){
Toast.makeText(MainActivity.this,"商品金额与名称不能为空",Toast.LENGTH_LONG).show();
return ;
}
// 如果 balance 不是空字符串,则进行强制类型转换
Account a = new Account(name,Integer.parseInt(balance));
dao.insert(a);
list.add(a);
adapter.notifyDataSetChanged();
accountLV.setSelection(accountLV.getCount()-1);
// 清空输入
nameET.setText("");
balanceET.setText("");
}
//自定义一个适配器(把数据装到ListView的工具)
private class MyAdapter extends BaseAdapter {
public int getCount(){ //获取条目总数
return list.size();
}
public Object getItem(int position) //根据位置获取对象
{
return list.get(position);
}
public long getItemId(int position) //根据位置获取id
{
return position;
}
//获取一个条目视图
public View getView(int position, View convertView, ViewGroup parent)
{
//重用converView
View item = convertView != null?convertView:View.inflate(getApplicationContext(),R.layout.item,null);
//获取该视图中的textview
TextView idTV=(TextView) item.findViewById(R.id.idTV);
TextView nameTV=(TextView) item.findViewById(R.id.nameTV);
TextView balanceTV=(TextView) item.findViewById(R.id.balanceTV);
//根据当前位置获取Account对象
final Account a = list.get(position);
//把Account对象中的数据放到textview中
idTV.setText(a.getId()+"");
nameTV.setText(a.getName());
balanceTV.setText(a.getBalance()+"");
Button upTV=(Button) item.findViewById(R.id.upIV);
Button downTV=(Button) item.findViewById(R.id.downIV);
Button deleteTV=(Button) item.findViewById(R.id.deleteIV);
//向上箭头的事件触发方法
// upTV.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// a.setBalance(a.getBalance()+1);
// notifyDataSetChanged();
// dao.update(a);
// }
// });
// // 向下箭头的事件触发的方法
// downTV.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// a.setBalance(a.getBalance()-1);
// notifyDataSetChanged();
// dao.update(a);
// }
// });
// 修改数据
upTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View dv = View.inflate(getApplicationContext(),R.layout.update, null);
final EditText det1 = dv.findViewById(R.id.dialogET1);
final EditText det2 = dv.findViewById(R.id.dialogET2);
det1.setText(a.getName());
det2.setText(a.getBalance().toString());
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
//ad.setTitle("修改");
ad.setView(dv);
ad.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
a.setName( det1.getText().toString().trim());
a.setBalance(Integer.parseInt(det2.getText().toString().trim()));
dao.update(a);
notifyDataSetChanged();
}
});
ad.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
}
});
ad.show();
}
});
//删除图片的点击事件触发的方法
deleteTV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//删除数据之前首先弹出一个对话框
android.content.DialogInterface.OnClickListener listener=
new android.content.DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
list.remove(a);//从集合删除
dao.delete(a.getId());//从数据库删除
notifyDataSetChanged();//刷新界面
}
};
//创建对话框
Builder builder =new Builder(MainActivity.this);
builder.setTitle("确定要删除吗?"); //设置标题
//设置确定按钮的文本以及监听器
builder.setPositiveButton("确定",listener);
builder.setNegativeButton("取消",null);
builder.show();
}
});
return item;
}
}
}
4.5、activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/nameET"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="商品名称"
android:inputType="textPersonName"/>
<EditText
android:id="@+id/balanceET"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="金额"
android:inputType="number"/>
<Button
android:id="@+id/addIV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加"
android:onClick="add"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="编号"
android:textColor="#000000"
android:textSize="20sp"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:singleLine="true"
android:text="名称"
android:textColor="#000000"
android:textSize="20sp"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:singleLine="true"
android:text="金额"
android:textColor="#000000"
android:textSize="20sp"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:singleLine="true"
android:text="操作"
android:textColor="#000000"
android:textSize="20sp"/>
</LinearLayout>
<ListView
android:id="@+id/accountLV"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/addLL"/>
</LinearLayout>
4.6、item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/idTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="13"
android:textColor="#000000"
android:textSize="20sp"/>
<TextView
android:id="@+id/nameTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:singleLine="true"
android:text="PQ"
android:textColor="#000000"
android:textSize="20sp"/>
<TextView
android:id="@+id/balanceTV"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:singleLine="true"
android:text="12345"
android:textColor="#000000"
android:textSize="20sp"/>
<Button
android:id="@+id/upIV"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="up"
/>
<Button
android:id="@+id/downIV"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:text="down"
/>
<Button
android:id="@+id/deleteIV"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:text="删除" />
</LinearLayout>
4.7、update.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/dialogTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="修改信息" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="名称"
/>
<EditText
android:id="@+id/dialogET1"
android:layout_width="141dp"
android:layout_height="wrap_content"
android:layout_weight="2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="金额"
/>
<EditText
android:id="@+id/dialogET2"
android:layout_width="141dp"
android:layout_height="wrap_content"
android:layout_weight="2" />
</LinearLayout>
</LinearLayout>
9、常用组件函数
9.1、TextView
方法 | 说明 |
---|---|
getText() | 获取文本的内容 |
setText() | 设置文本内容 |
setTextSize() | 文字框大小 |
setTextColor() | 文字颜色 |
9.2、Button
Button 按钮的点击事件
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
...
}
});
10、demo
10.1、登录页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="请输入登录信息"
android:textColor="#00a212"
android:textSize="18sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入账户"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:password="true"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="登录"
android:color="#fff"
android:textSize="18dp"
android:background="#a0a212"/>
</LinearLayout>
10.2、线性布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".LayoutTest">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<Button
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2333"
android:textSize="30sp"
android:layout_width="match_parent"/>
<Button
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2333"
android:textSize="30sp"
android:layout_width="match_parent"/>
<Button
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2333"
android:textSize="30sp"
android:layout_width="match_parent"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_weight="1">
<Button
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2333"
android:textSize="30sp"
android:layout_width="match_parent"/>
<Button
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2333"
android:textSize="30sp"
android:layout_width="match_parent"/>
<Button
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2333"
android:textSize="30sp"
android:layout_width="match_parent"/>
</LinearLayout>
</LinearLayout>
10.3、单选框
Activity
private TextView text1 = findViewById(R.id.textView2);;
private Button bt = findViewById(R.id.button);;
private RadioGroup rp = findViewById(R.id.rp);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_radio_group);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int id = rp.getCheckedRadioButtonId();
if(id == R.id.plane){
text1.setText("选择的是飞机");
}else if(id == R.id.car){
text1.setText("选择的是汽车");
}else if(id == R.id.train){
text1.setText("选择的是火车");
}
}
});
}
layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".RadioGroupTest">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#ac2333"
android:textSize="20sp"
android:text="请选择你的出行方式" />
<RadioGroup
android:id="@+id/rp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout_editor_absoluteX="-11dp"
tools:layout_editor_absoluteY="16dp">
<RadioButton
android:id="@+id/train"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="火车" />
<RadioButton
android:id="@+id/plane"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="飞机" />
<RadioButton
android:id="@+id/car"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="汽车" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="确定" />
</RadioGroup>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="20sp"
android:text="请选择" />
</LinearLayout>