我创建了一个preference_headers.xml,如下所示。我的活动能够毫无问题地生成它。我想知道如何将参数(即IP地址字符串)从活动传递到片段类。我想使用findfragmentbyid()来访问特定的片段,但是,我不知道如何在preference_headers.xml的header标签中添加ID。
这是我的示例代码。感谢
===== SetupActivity.java =======
public class SetupActivity extends SherlockPreferenceActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
===== preference_headers.xml =======
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:title="Network" />
<header
android:id="@+id/setting_wifi"
android:fragment="com.example.setup.WIFIFragment"
android:title="@string/setting_wifi" >
</header>
</preference-headers>
===== WIFIFragment .java =======
public static class WIFIFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_wifi);
}
}
答案 0 :(得分:4)
在SherlockPreferenceActivity
覆盖此方法
@Override
public void onHeaderClick(Header header, int position) {
// Here's an example
if(header.fragmentArguments == null)
{
header.fragmentArguments = new Bundle();
}
header.fragmentArguments.putString("IP", "Hi there! My IP is 127.0.0.1");
super.onHeaderClick(header, position);
}
您可以在片段中获取参数
public static class WIFIFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference_wifi);
Bundle b = getArguments();
if(b != null)
Toast.makeText(getActivity() , b.getString("IP") , 1).show();
}
}
我在Jelly bean中尝试了这个,而不是在Actionbar Sherlock库中,但你可以尝试一下。希望它有所帮助
答案 1 :(得分:0)
您可以使用findFragmentByTag()
来获取片段。当您将片段添加到活动时,需要设置标记名称。
答案 2 :(得分:0)
我用 。getPreferenceManager()findPreference(PREF_KEY).getExtras();
获取附加组件,并将我想要的任何内容放入其中。