Intent显式实现页面跳转(并携带数据)
Button login_but = findViewById(R.id.login_button);
login_but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,login_activity.class);
//intent.putExtra("name","zoo"); //键值对形式传递数据
startActivity(intent);
}
});
// ------------------增加数据传递---------------------------
//在第二个活动接受intent实例
// Intent Intent = getIntent();
// String data = intent.getStringExtra("name");
// Toast.makeText(RegisterActivity.this,data,Toast.LENGTH_LONG).show();
Intent返回数据给上一个活动
//一、换成startActivityForResult启动活动
register_but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,register_activity.class);
startActivityForResult(intent,1); //通过starActivityForResult来启动下一个活动,并给其一个标记 (这里标记为1)因为要判断是哪个活动销毁后返回给的数据
}
});
//二、在下层活动中新建Intnet携带数据返回,并销毁
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("name","handsome");//返回数据
setResult(RESULT_OK,intent); //请求码
finish();//销毁活动
}
});
}
//活动销毁会回调onActivityResult,需要重写
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case 1:
if(resultCode==RESULT_OK){
String resdata = data.getStringExtra("name");
Toast.makeText(MainActivity.this,resdata,Toast.LENGTH_LONG).show();
}
}
}
Iintent隐式用法
//mainfest.xml
<activity
android:name=".ConnectActivity"
android:exported="true" >
<intent-filter>
<action android:name="com.example.qq.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.qq.my_category"/>
//指定响应的目录为my_category
</intent-filter>
</activity>
//在活动中
Button but2 = (Button) findViewById(R.id.button2);
but2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.qq.ACTION_START");
intent.addCategory("com.example.qq.my_category");//给intent增加目录
startActivity(intent);
}
});
Toast弹出提示消息
Button but1 = findViewById(R.id.but1);
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this,"you have clicked but1",Toast.LENGTH_SHORT).show()
}
});
选择菜单项OptionMenu
长按菜单项ContextMenu
子菜单项SubMenu
参考连接三种菜单项实现方式
//在res文件下新建一个文件夹menu(不能搞错位置,否则右键找不到menu resourece file) 新建menu resourece file 并写入如下内容
/*<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item1"
android:title="设置" />
<item android:id="@+id/item2"
android:title="退出" />
</menu>*/
//重写onCreateOptionMenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// return super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.optionmenu,menu);
return true;
}
Broadcast全局广播—动态注册
<!--在mainfest.xml配置网络权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听网络变化
networkChangeReceiver = new NetworkChangeReceiver();//自定义一个处理网络变化的newworkchange的类 并实例化
registerReceiver(networkChangeReceiver,intentFilter);//注册广播接收器
//动态注册广播需要取消注册,重写ondestory
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);//取消注册
}
SharedPreferences存储
save_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();//创建实例
editor.putString("name","zpp");
editor.putInt("age",12);
editor.apply();//应用
}
});
SharedPreferences读取数据
read_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");//m没有值默认为空
int age = pref.getInt("age",0); //没有值默认为0
Log.d("ConnectActivity",name);
}
});
LitePal建立数据库
- 添加依赖 implementation 'org.litepal.guolindev:core:3.2.3’
- 配置mainfest.xml android:name="org.litepal.LitePalApplication"
- 在 app->src->main 新建一个assets文件夹,并新建一个litepal.xml文件
- 在com.examle.appming 下新建一个对象
点击跳转litepal国内镜像链接
package com.example.qq;
public class book {
private int id;
private String name;
private float price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
- 在litepal.xml下构建对象关系,这样就可以用对象的思想操作数据库
数据库名 bookstore
版本号 1 数据库发生变化 则版本号加一
表 book 这里为对象关系构建 下面代码显示的book就是在com.example.qq下的一个book对象
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="bookstore" />
<version value="1" />
<list>
<mapping class ="com.example.qq.book"/>
</list>
</litepal>
LitePal添加数据
如若进行PitePal的增删改查需要使BOOK对象继承LitePal
public class BOOK extends LitePalSupport{······}
upgrade_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BOOK book = new BOOK();
book.setId(1);
book.setPrice(12212);
book.setName("朱氏宝典");
book.setPress("人民出版社");
book.save();//save方法就是来自LitePalSupport
}
});