Fragment创建方式
Fragment有两种使用方式:静态方式 和 动态方式。
1. 静态方式
第一步:先定义一个Fragment子类。
public class ExampleFragment extends Fragment { @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { return inflater.inflate(R.layout.example_fragment,container,false); } }
说明:ExampleFragment是Fragment的子类,它的布局定义是example_fragment.xml文件。
第二步:定义Fragment子类对应的布局文件。
<?xml version="1.0" enCoding="utf-8"?><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="horizontal" > <EditText androID:ID="@+ID/edit_message" androID:layout_wIDth="0dp" androID:layout_height="wrap_content" androID:layout_weight="1" androID:hint="@string/edit_message" /> <button androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="@string/button_send" androID:onClick="sendMessage" /></linearLayout>
说明:上面是example_fragment.xml的内容。
第三步:在需要用到该Fragment的Activity对应的布局中使用该Fragment。
下面是引用Fragment的Activity的代码:
public class FragmentLayoutTest extends Activity{ /** Called when the activity is first created. */ @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); } }
下面是main.xml的内容:
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="vertical" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" > <TextVIEw androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:text="@string/fragment_intro" /> <fragment androID:name="com.skw.fragmentlayouttest.ExampleFragment" androID:ID="@+ID/frag_example" androID:layout_weight="1" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"/></linearLayout>
说明:在该布局文件中通过调用了先前自定义的ExampleFragment。
点击查看:静态方式的完整源码
2. 动态方式
重复"上面的第一步和第二步",实现一个Fragment子类。
第三步:在需要用到该Fragment的Activity对应的布局中使用定义一个FrameLayout。
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="vertical" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" > <TextVIEw androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:text="@string/fragment_intro" /> <FrameLayout androID:ID="@+ID/frag_example" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"/></linearLayout>
第四步:在Activity中将Fragment填充到FrameLayout中。
public class FragmentLayoutTest extends Activity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); // 获取FragmentManager FragmentManager fragmentManager = getFragmentManager(); // 获取FragmentTransaction FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // 获取ExampleFragment ExampleFragment fragment = new ExampleFragment(); // 将fragment添加到容器frag_example中 fragmentTransaction.add(R.ID.frag_example,fragment); fragmentTransaction.commit(); }}
PreferenceFragment使用说明
1. 创建配置文件
新建res/xml/preferences.xml,内容如下:
<PreferenceScreen xmlns:androID="http://schemas.androID.com/apk/res/androID"> <Preferencecategory androID:title="Preferencecategory A"> <!-- (01) androID:key是Preferece的ID (02) androID:Title是Preferece的大标题 (03) androID:summary是Preferece的小标题 --> <CheckBoxPreference androID:key="checkBox_preference" androID:title="Title_checkBox_preference" androID:summary="summary_checkBox_preference" /> </Preferencecategory> <Preferencecategory androID:title="Preferencecategory B"> <!-- androID:dialogTitle是对话框的标题 androID:defaultValue是默认值 --> <EditTextPreference androID:key="edittext_preference" androID:title="Title_edittext_preference" androID:summary="null" androID:dialogtitle="dialog_Title_edittext_preference" androID:defaultValue="null" /> <!-- androID:entrIEs是列表中各项的说明 androID:entryValues是列表中各项的值 --> <ListPreference androID:key="List_preference" androID:dialogtitle="Choose Font" androID:entrIEs="@array/pref_Font_types" androID:entryValues="@array/pref_Font_types_values" androID:summary="sans" androID:title="Font" androID:defaultValue="sans"/> </Preferencecategory> <Preferencecategory androID:title="Preferencecategory C"> <SwitchPreference androID:key="switch_preferece" androID:title="Title_switch_preferece" androID:defaultValue="true" /> <SeekbarPreference androID:key="seekbar_preference" androID:title="Title_seekbar_preference" androID:max="100" androID:defaultValue="30" /> </Preferencecategory></PreferenceScreen>
说明:PreferenceFragment的组件很多,包括CheckBoxPreference,EditTextPreference,ListPreference,SwitchPreference,SeekbarPreference,VolumePreference等。这些组建的属性定义如下。
(01) androID:key是Preferece的ID,它是Preferece的唯一标识。
(02) androID:Title是Preferece的大标题。
(03) androID:summary是Preferece的小标题。
(04) androID:dialogTitle是对话框的标题。
(05) androID:defaultValue是默认值。
(06) androID:entrIEs是列表中各项的说明。
(07) androID:entryValues是列表中各项的值。
注意:SwitchPreference是API 14(AndroID4.0)才支持的。所以,要想使用SwitchPreference的话,必须在manifest中定义apk支持的最小版本。
<uses-sdk androID:minSdkVersion="14" />
2. 自定义PreferenceFragment
public class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferencechangelistener,Preference.OnPreferenceClickListener { private static final String TAG = "##PrefsFragment##"; private static final String CHECK_PREFERENCE = "checkBox_preference"; private static final String EDITTEXT_PREFERENCE = "edittext_preference"; private static final String List_PREFERENCE = "List_preference"; private static final String SWITCH_PREFERENCE = "switch_preferece"; private static final String SEEKbar_PREFERENCE = "seekbar_preference"; private Preference mEditText; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromresource(R.xml.preferences); mEditText = (Preference) findPreference(EDITTEXT_PREFERENCE); mEditText.setonPreferenceClickListener(this); } @OverrIDe public voID onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { // Set summary to be the user-description for the selected value Preference connectionPref = findPreference(key); if (key.equals(CHECK_PREFERENCE)) { boolean checked = sharedPreferences.getBoolean(key,false); Log.d(TAG,"CheckBox: checked="+checked); } else if (key.equals(EDITTEXT_PREFERENCE)) { String value = sharedPreferences.getString(key,""); connectionPref.setSummary(value); Log.d(TAG,"EditText: value="+value); } else if (key.equals(List_PREFERENCE)) { String value = sharedPreferences.getString(key,"List: value="+value); } else if (key.equals(SWITCH_PREFERENCE)) { boolean checked = sharedPreferences.getBoolean(key,"Switch: checked="+checked); } else if (key.equals(SEEKbar_PREFERENCE)) { int value = sharedPreferences.getInt(key,0); Log.d(TAG,"Seekbar: value="+value); } } @OverrIDe public boolean onPreferenceClick(Preference preference) { SharedPreferences sharedPreferences = preference.getSharedPreferences(); String value = sharedPreferences.getString(preference.getKey(),""); Log.d(TAG,"onPreferenceClick: value="+value); return true; } @OverrIDe public voID onResume() { super.onResume(); getPreferenceManager().getSharedPreferences().registerOnSharedPreferencechangelistener(this); } @OverrIDe public voID onPause() { getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferencechangelistener(this); super.onPause(); }}
说明:PreferenceFragment中的每一项都是一个SharedPreferences对象,它们会像SharedPreferences存储在该APK的私有数据区。监听PreferenceFragment中的成员有多种方式,常用的两种就是:
(01) 监听数据的变化:通过实现SharedPreferences.OnSharedPreferencechangelistener接口,来监听PreferenceFragment中每一项的数据变化。
(02) 监听点击事件:通过实现Preference.OnPreferenceClickListener接口,来监听PreferenceFragment中每一项的点击动作。
3. 使用PreferenceFragment
前面已经定义好了一个PreferenceFragment。接下来,就可以实例化它的对象,并将其在Activity中进行显示。
public class FragmentTest extends Activity { @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentVIEw(R.layout.main); getFragmentManager().beginTransaction().replace(androID.R.ID.content,new PrefsFragment()).commit(); }}总结
以上是内存溢出为你收集整理的Android中Fragment子类及其PreferenceFragment的创建过程演示全部内容,希望文章能够帮你解决Android中Fragment子类及其PreferenceFragment的创建过程演示所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)