疯狂Android讲义(第3版)学习笔记(第四章---Activity与Fragment)
2017-09-01 14:45
513 查看
1,PreferenceActivity和ExpandableListActivity的使用
PreferenceActivity主要用于显示一个显示设置选项参数并进行保存的窗口,ExpandableListActivity主要用于显示一个可展开的列表窗口// PreferenceActivityTest import android.content.SharedPreferences; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.widget.Button; import android.widget.Toast; import java.util.List; /** * PreferenceActivity是通过选项设置的布局文件,以PreferenceScreen作为根元素 * 并结合PreferenceFragment使用,其中Activity负责加载列表布局,Fragment负责加载选项布局 */ public class PreferenceActivityTest extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 为界面设置一个标题按钮 if(hasHeaders()){ Button btn = new Button(this); btn.setText("设置操作"); // 将按钮添加到界面 setListFooter(btn); } } /** * 重写该方法,用于加载界面布局文件 */ @Override public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.preference_headers , target); } /** * 重写该方法,验证各PreferenceFragment是否有效 */ @Override protected boolean isValidFragment(String fragmentName) { return true; } /** * 创建Prefs1Fragment和Prefs2Fragment两个类 * 点击header出现的两个Fragment 在header里面设置对应的Fragment */ public static class Prefs1Fragment extends PreferenceFragment{ private SharedPreferences mSp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); initData(); } private void initData() { PreferenceScreen ps = getPreferenceScreen(); Preference pName = ps.findPreference("name"); EditTextPreference etp = (EditTextPreference) pName; etp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String name = mSp.getString("name", ""); Toast.makeText(getActivity(), "name:" + name, Toast.LENGTH_SHORT).show(); return true; } }); } } public static class Prefs2Fragment extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.display_prefs); // 获取传入该Fragment的参数 String website = getArguments().getString("website"); Toast.makeText(getActivity(), "网站的域名是:" + website , Toast.LENGTH_SHORT).show(); } } } ---------------------------------------------------------------------------------------- // (xml)preference_headers.xml // 加载activity的界面布局 <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> <!--指定PreferenceFragment的列表项--> <header android:fragment="com.zhumei.activity.PreferenceActivityTest$Prefs1Fragment" android:icon="@mipmap/a" android:title="小鸡相关设置" android:summary="设置小鸡相关选项"/> <header android:fragment="com.zhumei.activity.PreferenceActivityTest$Prefs2Fragment" android:icon="@mipmap/b" android:title="螃蟹相关设置" android:summary="设置螃蟹相关选项"> <extra android:name="website" android:value="www.zhumei.net"/> </header> <header android:icon="@mipmap/c" android:title="使用Intent" android:summary="使用Intent启动某个Activity"> <intent android:action="android.intent.action.VIEW" android:data="http://www.zhumei.net/"/> </header> </preference-headers> ---------------------------------------------------------------------------------------- // (xml)prefs.xml和(xml)display_prefs.xml // 加载fragment的界面布局 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <!--设置系统铃声--> <PreferenceCategory android:title="铃声选择设置"> <RingtonePreference android:key="ring_key" android:ringtoneType="all" android:showDefault="true" android:showSilent="true" android:summary="选择铃声(设置RingtonePreference)" android:title="设置铃声"/> </PreferenceCategory> <PreferenceCategory android:title="英雄选择设置"> <MultiSelectListPreference android:dialogTitle="你最喜欢的英雄为:" android:entries="@array/hero_name_list" android:entryValues="@array/hero_value_list" android:key="hero" android:summary="选择英雄(设置MultiSelectListPreference)" android:title="设置你最喜欢的英雄"/> </PreferenceCategory> <PreferenceCategory android:title="帐号信息设置"> <!--通过输入框填写用户名--> <EditTextPreference android:dialogTitle="您所使用的用户名为:" android:key="name" android:summary="填写您的用户名(测试EditTextPreference)" android:title="填写用户名"/> </PreferenceCategory> <PreferenceCategory android:title="性别设置"> <ListPreference android:dialogTitle="ListPreference" android:entries="@array/gender_name_list" android:entryValues="@array/gender_value_list" android:key="gender" android:summary="选择您的性别(测试ListPreference)" android:title="性别"/> </PreferenceCategory> <PreferenceCategory android:title="系统功能设置"> <CheckBoxPreference android:defaultValue="true" android:key="autoSave" android:summaryOff="自动保存:关闭(测试CheckBoxPreference)" android:summaryOn="自动保存:开启(测试CheckBoxPreference)" android:title="自动保存进度"/> </PreferenceCategory> <PreferenceCategory android:title="定时开关机设置"> <SwitchPreference android:defaultValue="true" android:key="timingStartStop" android:summaryOff="定时开关机:打开(测试SwitchPreference)" android:summaryOn="定时开关机:关闭(测试SwitchPreference)" android:title="设置定时开关机"/> </PreferenceCategory> </PreferenceScreen> ---------------------------------------------------------------------------------------- // (values)array.xml // 加载fragment设置选项entries和entryValues中的集合 <resources> <string-array name="light_strength_list"> <item>暗</item> <item>亮</item> <item>超亮</item> </string-array> <string-array name="light_value_list"> <item>暗</item> <item>亮</item> <item>超亮</item> </string-array> <string-array name="gender_name_list"> <item>男</item> <item>女</item> <item>未知</item> </string-array> <string-array name="gender_value_list"> <item>男</item> <item>女</item> <item>未知</item> </string-array> <string-array name="hero_name_list"> <item>墨菲特</item> <item>阿木木</item> <item>厄加特</item> </string-array> <string-array name="hero_value_list"> <item>墨菲特</item> <item>阿木木</item> <item>厄加特</item> </string-array> </resources> ---------------------------------------------------------------------------------------- // MainActivity import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mBtn1; private Button mBtn2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtn1 = (Button) findViewById(R.id.btn1); mBtn2 = (Button) findViewById(R.id.btn2); mBtn1.setOnClickListener(this); mBtn2.setOnClickListener(this); } @Override protected void onResume() { super.onResume(); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); // 获取到的是entryValues(存储在数据库中的内容,而entry是显示给用户看的内容) // 这里的键就是Preference里面的key String gender = sp.getString("gender", ""); Toast.makeText(MainActivity.this, "gender:" + gender, Toast.LENGTH_SHORT).show(); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn1: Intent intent1 = new Intent(MainActivity.this , ExpandableListActivityTest.class); startActivity(intent1); break; case R.id.btn2: Intent intent2 = new Intent(MainActivity.this , PreferenceActivityTest.class); startActivity(intent2); break; default: break; } } } ---------------------------------------------------------------------------------------- // activity_main <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.zhumei.activity.MainActivity"> <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="to ExpandableListActivityTest"/> <Button android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="to PreferenceActivityTest"/> </LinearLayout>
Demo下载请移步:http://download.csdn.net/download/zxc514257857/9960343
相关文章推荐
- 疯狂Android讲义(第3版)学习笔记(第二章---界面编程)
- 《android编程权威指南》学习笔记之第四章 Activity应用的调试
- v4包下的fragment调用 startActivityForResult 时闪退
- Fragment中 onActivityResult不响应
- (转)Activity和Fragment传递数据的两种方式
- activity与activity之间怎么传值,与fragment是怎么创的?
- Activity与Fragment的生命周期测试
- FragmentActivity和Activity的具体区别在哪里
- Android:activity,fragment和service之我见(准备更新)
- 关于Activity和Fragment的一些问题
- Activity与Fragment的通信方式
- activity给fragment传递数据
- Android - 小问题 一张图彻底理解Activity/Fragment的生命周期
- fragment点击跳转到外部Activity后,怎么通过返回按钮返回
- Activity和Fragment如何进行通信
- 第四章 Android开发三大基石—Activity、Service和Handler(3)
- android开发(41) Fragment中使用POP_BACK_STACK_INCLUSIVE达到一次跳转到栈底。类似Activity的 采用FLAG_ACTIVITY_CLEAR_TOP
- 【转载】Android开发中巧用Activity和Fragment
- Fragment 和 FragmentActivity的使用1
- EventBus进入Activity页面给Fragment传值,并弹出提示