您的位置:首页 > 移动开发 > Android开发

疯狂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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息