- Activity处理返回结果
新建一个Activity用来设置数据
布局文件
<RelativeLayout 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=".PhoneNumberListActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
</RelativeLayout>
activity
public class PhoneNumberListActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_number_list);
listView=findViewById(R.id.listView);
final String[] numbers={"17474749174","13838389438","18944447777","13548965214","15896458963"};
ArrayAdapter<String> adapter=new ArrayAdapter<String>(
this,android.R.layout.simple_list_item_1,android.R.id.text1,numbers);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String number=numbers[position];
Intent intent=new Intent();
intent.putExtra("number",number);
setResult(RESULT_OK,intent);//设置返回结果
finish();//结束当前的界面
}
});
}
}
主界面设置如下
这边就写select的方法
public class MainActivityResult extends AppCompatActivity {
private static final int REQUESTCODE_1 =0x1 ;
private EditText editText_number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_result);
editText_number=findViewById(R.id.editText_number);
}
/**
* 选择一个号码
* @param v
*/
public void selectClick(View v){
Intent intent=new Intent(this,PhoneNumberListActivity.class);
//Intent,请求编码
startActivityForResult(intent,REQUESTCODE_1);
}
//重写该方法来处理返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUESTCODE_1 && resultCode==RESULT_OK){
String number=data.getStringExtra("number");
editText_number.setText(number);
}
}
}
- Activity运行时屏幕的方向和显示设置
屏幕方向
<activity
android:screenOrientation="portrait"
//竖屏,值为landscape时为横屏
</activity>
横屏效果
也可以通过代码设置方向
//通过代码设置屏幕方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏
设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
全屏效果
去标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
效果
全屏也可直接在清单文件中设置主题
<activity
android:theme="@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"
</activity>
设置窗口模式,在清单文件中设置主题
<activity
android:theme="@android:style/Theme.DeviceDefault.Dialog"
</activity>
注意
代码设置必须在setContentView之前
屏幕方向旋转
屏幕切换时默认情况下会重新创建Activity
为了保存当前Activity的状态,我们可以重写onSaveInstanceState方法来保存相关的数据
然后在onCreate方法中还原数据
public class ScreenChangeActivity extends Activity {
int index=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_change);
System.out.println("ScreenChangeActivity-onCreate");
//还原状态值
if(savedInstanceState!=null){
index=savedInstanceState.getInt("index",0);
}
}
public void changeClick(View v){
index++;
System.out.println("index:"+index);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
System.out.println("onSaveInstanceState");
outState.putInt("index",index);
}
}
但是,不断的重新创建Activity很占资源,于是,我们在清单文件中设置
<activity
android:configChanges="keyboard|screenSize|orientation" //当发生键盘变化,屏幕大小变化,屏幕方向变化时,调用onConfigurationChanged方法
</activity>
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
System.out.println("onConfigurationChanged");
}
这样就可以避免重复的创建Activity,而是通过方法直接重新创建视图。
- SharedPreferences保存数据
当我们平时输短信输到一半时,有电话打进来,这是短信就会进入paused状态,有可能会被kill,所以我们需要保存输到一半的内容,方便我们打完电话返回短信能够接着输入。
在onPause里存储数据
protected void onPause() {
super.onPause();
String msg=editText_msg.getText().toString();
if (TextUtils.isEmpty(msg)){
return;
}
SharedPreferences.Editor editor=sp.edit();
editor.putString("msg",msg);
editor.commit();//提交
}
在onResume里还原数据
protected void onResume() {
super.onResume();
editText_msg.setText(sp.getString("msg",""));//还原数据
}
onCreate代码块
private SharedPreferences sp;
private EditText editText_msg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared_preferences);
editText_msg=findViewById(R.id.editText_msg);
//获取当前程序的SharedPreferences对象
sp=getSharedPreferences("msg", Context.MODE_PRIVATE);
//删除保存的数据
SharedPreferences.Editor editor=sp.edit();
editor.remove("msg");
editor.commit();
}
过程中会产生一个存储数据的文件