2013-02-05 81 views
1

我按照以下方式創建了preference_headers.xml。我的活動能夠生成它沒有任何問題。我想知道如何將一個參數(即IP地址字符串)從活動傳遞給片段類。我想使用findfragmentbyid()來訪問特定的片段,但是,我不知道如何在preference_headers.xml中的標頭標籤上添加一個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); 
    } 

} 

回答

3

在你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(); 
    } 

} 

我在果凍豆沒有動作條福爾摩斯圖書館嘗試這樣做,但你可以嘗試它。希望它有幫助

+0

它的工作原理。謝謝格倫 – user1467903

+0

如果它正在工作,請標記答案:) – 2013-02-05 06:40:38

0

您可以使用findFragmentByTag()來獲得片段。當您將片段添加到活動時,標記名稱將需要設置。

+0

如何添加標籤?我在preference_headers.xml中定義了片段。任何示例代碼? – user1467903

+0

我個人從未使用偏好標題,所以我不知道。 'getFragmentManager()。findFragmentById(R.id.setting_wifi)'不起作用? –

+0

不。我認爲R.id.setting_wifi與頭部不片段相關。 – user1467903

0

我使用 getPreferenceManager()。findPreference(PREF_KEY).getExtras();

得到額外的捆綁包,並把我想要的任何東西。