Android Api Demos登顶之路(十七)Redirection
2015-08-03 19:46
363 查看
这个demo演示的是从另外一个activity中获取用户输入的信息。
基本实现思路是:1.在子activity中用户输入信息时,将用户输入的信息保存到sharepreference中, sharepreference的用法我们在前面的章节中已经介绍过。实现数据的持久化,并可以在当前应用中的 各个activity之间共享这些信息。
2.进入信息显示的主界面时首先获取sharepreference中的内容,如果内容不为空则将内容显示到主界面上, 如果内容为空,则开启用户输入界面,让用户输入信息。
3.当用户输入完毕并保存到sharepreference中后,再调从sharepreference中加载数据的方法,将信息 显示到当前的主界面上。
本例中使用了startactivityforresult()方法来开启子activity,主要是利用返回的结果码来决定主界面的显示状态。事实上数据已经在sharepreference中持久化,使用startActivity()方法开启 子activity也同样可以实现此功能。不过可以在本例中体会一下请求码的用法。
主布局文件:activity_main.xml
显示用户信息的主界面布局文件:redirect_main.xml
用户输入界面的布局文件redirect_getter.xml
MainActivity
RedirectMain
RedirectGetter
当然最后提醒一下在配置文件中注册activity
基本实现思路是:1.在子activity中用户输入信息时,将用户输入的信息保存到sharepreference中, sharepreference的用法我们在前面的章节中已经介绍过。实现数据的持久化,并可以在当前应用中的 各个activity之间共享这些信息。
2.进入信息显示的主界面时首先获取sharepreference中的内容,如果内容不为空则将内容显示到主界面上, 如果内容为空,则开启用户输入界面,让用户输入信息。
3.当用户输入完毕并保存到sharepreference中后,再调从sharepreference中加载数据的方法,将信息 显示到当前的主界面上。
本例中使用了startactivityforresult()方法来开启子activity,主要是利用返回的结果码来决定主界面的显示状态。事实上数据已经在sharepreference中持久化,使用startActivity()方法开启 子activity也同样可以实现此功能。不过可以在本例中体会一下请求码的用法。
主布局文件:activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/info_main" /> <Button android:onClick="click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:text="Go"/> </LinearLayout>
显示用户信息的主界面布局文件:redirect_main.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" android:padding="5dp" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="You now see the main activity running normally because the user text has been set to:"/> <TextView android:id="@+id/tv_user_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:textAppearance="?android:attr/textAppearanceMedium" /> <Button android:id="@+id/bt_clean" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="Clean and Exit"/> <Button android:id="@+id/bt_new_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="New Text"/> </LinearLayout>
用户输入界面的布局文件redirect_getter.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" android:padding="5dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Enter the text that will be used by main activity.Press back to cancel."/> <EditText android:id="@+id/et_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp"/> <Button android:onClick="click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="Apply"/> </LinearLayout>
MainActivity
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Intent intent=new Intent(this, RedirectMain.class); startActivity(intent); } }
RedirectMain
public class RedirectMain extends Activity implements OnClickListener { private static final int INIT_TEXT_CODE = 0; private static final int NEW_TEXT_CODE = 1; private String mText; private TextView tv_user_input; private Button bt_clean, bt_new; private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.redirect_main); sp=getSharedPreferences("redirection", Context.MODE_PRIVATE); tv_user_input = (TextView) findViewById(R.id.tv_user_input); bt_clean = (Button) findViewById(R.id.bt_clean); bt_new = (Button) findViewById(R.id.bt_new_text); bt_clean.setOnClickListener(this); bt_new.setOnClickListener(this); //首先在sharepreference中检索是否有保存的内容,如果内容为空则开启子activity //让用户输入信息 if(!loadPreserce()){ Intent intent=new Intent(this, RedirectGetter.class); startActivityForResult(intent, INIT_TEXT_CODE); } } /** * 检索SharedPreferences中保存的内容如果为空返回false否则将内容显示在textview上 * 并返回true * @return */ private boolean loadPreserce() { mText=sp.getString("text", null); if(mText!=null && mText!=""){ tv_user_input.setText(mText); return true; } return false; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==INIT_TEXT_CODE){ //如果在SharedPreferences内容为空且用户取消了信息输入的请求则结束当前的activity //即退出到MainActivity当中 if(resultCode==RESULT_CANCELED){ finish(); }else{ loadPreserce(); } } if(requestCode==NEW_TEXT_CODE){ /* * 如果当前的请求码为NEW_TEXT_CODE说明textView中显示了SharedPreferences中 * 保存的用户信息,此时如果结果码为RESULT_CANCELED只是说明用户没有修改textViewk * 中的内容,仍需保留在当前界面,所以我们不需要关心这种情况。 */ if(resultCode==RESULT_OK){ loadPreserce(); } } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_clean: celanAndExit(); break; case R.id.bt_new_text: newText(); break; default: break; } } /** * 打开用户输入的activity让用户重新输入信息 */ private void newText() { Intent intent=new Intent(this, RedirectGetter.class); startActivityForResult(intent, NEW_TEXT_CODE); } /** * 清除sharepreference中的内容并退出当前的activity */ private void celanAndExit() { sp.edit().remove("text").commit(); finish(); } }
RedirectGetter
/** * 用户输入信息的子界面 * * @author aaaa * */ public class RedirectGetter extends Activity { private EditText et_input; private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.redirect_getter); sp = getSharedPreferences("redirection", Context.MODE_PRIVATE); et_input = (EditText) findViewById(R.id.et_input); //如果sharepreference中有数据则载入数据并回显到editView当中 loadPreference(); } private void loadPreference() { String mTextPre=sp.getString("text", null); if(mTextPre!=null){ et_input.setText(mTextPre); }else{ et_input.setText(""); } } /** * 点击按钮时将数据保存到sharepreference当中 * * @param v */ public void click(View v) { SharedPreferences.Editor editor=sp.edit(); editor.putString("text", et_input.getText().toString()); if(editor.commit()){ //如果数据被正确保存,则设置结果码为请求成功 setResult(RESULT_OK); } finish(); } }
当然最后提醒一下在配置文件中注册activity
相关文章推荐
- android-support-v7包的添加
- javafx 运行在android上遇到的难题-完美解决
- Android ViewFlipper用法浅析
- Android视频播放之VideoView
- Android 毛玻璃效果
- Android环境搭建
- Android 旋转动画,停止和持续旋转
- MAC OS ANDROID环境搭建
- android中如何实现mvc,用MVC进行重构
- Android Handler消息处理顺序分析
- Android Handler消息处理顺序分析
- Android Handler消息处理顺序分析
- Android procrank
- Android创建菜单Menu
- Android批量打包提速 - 1分钟900个市场不是梦
- Android批量打包提速 - 1分钟900个市场不是梦
- android 后台代码设置动画
- Android Studio 修改 包名 package name
- android之SharedPreferences
- Android复习笔记(9) - 调用远程服务