2013-06-22 3 views
7

나는 안드로이드에 새로운 오전, 그래서 나는 프로그래밍 내 PreferenceFragmentEditTextPreference에게 개체를 추가하는 방법을 에 약간의지도가 필요합니다.프로그래밍 방식으로 내 PreferenceFragment에 EditTextPreferences를 추가하려면 어떻게해야합니까?

웹 서비스에서 값 목록을 가져옵니다. 성공적으로 내 SharedPreferences에 저장했으며 URL (경로 부분)을 생성하는 데 사용합니다.

나는이 값을 편집 할 수 있도록 내 응용 프로그램의 사용자를 싶지만, 구글에서 검색을 많이 후에는 프로그램PreferenceFragmentEditTextPreference에게 개체를 추가하는 방법을 나에게 분명하지 않다 .

유의하시기 바랍니다, 내 PreferenceFragment된 SharedPreferences 환경 설정 xml 파일 (PreferenceScreen)에 이름과 내가 하드 코드 값에 대해 잘 작동한다. 나 또한 내 SharedPreferences을 얻는 방법을 알고 있으므로 나에게 그 부분을 설명하는 것에 대해 걱정할 필요가 없습니다.

나는 나의 PreferenceFragment에서 onCreate에서 addPreferencesFromResource를 사용합니다. 나는 그들을 onCreateView에 추가해야합니까? 나는 PreferenceCategory을 거기에 추가 할 수 있다고 생각하고 있었습니까? 그러나 다시, 나는 그것을 어떻게하는지 잘 모릅니다. 나는 정말 도움에 감사 할 것입니다! PreferenceFragment에 대한

// 코드

PrefsFragment.java: 
package com.example.lorddoineedhelp; 

import android.os.Bundle; 
import android.preference.PreferenceFragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class PrefsFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = super.onCreateView(inflater, container, savedInstanceState); 
    // I am guessing I need to do something here? 
    return v; 
    } 
} 

XML 파일 :

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Hard coded values --> 
    <PreferenceCategory 
      android:title="General"> 
    <CheckBoxPreference 
      android:key="debug" 
      android:title="Debug" 
      android:summary="Enable Debug" /> 
    </PreferenceCategory> 
    <PreferenceCategory android:title="Address"> 
    <EditTextPreference 
     android:key="ipAddress" 
     android:title="IP Address" 
     android:summary="IP Address used for Image pings" 
    /> 
    <EditTextPreference 
      android:key="port" 
      android:title="Port" 
      android:summary="Port used for Image pings" /> 
    </PreferenceCategory> 

    <!-- Where I want to add the values from my web service --> 

    <PreferenceCategory 
     android:title="Paths" 
     android:key="urlPaths"> 
    </PreferenceCategory> 
</PreferenceScreen> 

답변

0

onCreateView 방식으로 작동하는지 모르겠어요하지만이 에서와는을 onViewCreated.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    this.getPreferenceScreen().addPreference(new EditTextPreference(getActivity())); 
} 
13

당신은 환경 설정을 추가 할 수 있습니다, 예를 들면 : 여기 (PreferenceFragment의 서브 클래스 내부) 내 코드입니다 EditTextPreference, CheckBox 등을 PreferenceFragment의 "onCreate"메소드에서 프로그래밍 방식으로 호출합니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Load "dummy" (empty) preferences from an XML resource 
    addPreferencesFromResource(R.xml.preferences_channelconfig); 

    PreferenceScreen screen = this.getPreferenceScreen(); // "null". See onViewCreated. 

    // Create the Preferences Manually - so that the key can be set programatically. 
    PreferenceCategory category = new PreferenceCategory(screen.getContext()); 
    category.setTitle("Channel Configuration"); 
    screen.addPreference(category); 

    CheckBoxPreference checkBoxPref = new CheckBoxPreference(screen.getContext()); 
    checkBoxPref.setKey(channelConfig.getName() + "_ENABLED"); 
    checkBoxPref.setTitle(channelConfig.getShortname() + "Enabled"); 
    checkBoxPref.setSummary(channelConfig.getDescription()); 
    checkBoxPref.setChecked(channelConfig.isEnabled()); 

    category.addPreference(checkBoxPref); 
} 

결정적인 단계는 단편 빈 PreferenceScreen를 연결하는 더미 XML 더불어 addPreferencesFromResource(...)이다. 이것이 없으면 "기본 설정 계층 구조의 루트"인 최상위 기본 설정이 없으므로 this.getPreferenceScreen()은 Null을 반환합니다. 내가 사용

XML은 단지했다 : 사람을 도움이

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orderingFromXml="true"> 

</PreferenceScreen> 

희망.

+8

이것은 XML이없는 환경 설정에 적합합니다.실제로 더미 XML을 사용할 필요가 없습니다. 대신 다음을 사용할 수 있습니다. PreferenceScreen screen = getPreferenceManager(). createPreferenceScreen (getActivity()); setPreferenceScreen (screen); – kat