2012-08-29 4 views
4

J'ai un tel morceau de code :) Et je veux modifier la propriété de texte de ma disposition de préférence personnalisée. Mais les modifications apportées à l'objet à partir de la fonction getView n'affectent pas la liste actuelle dans l'écran des préférences. des idées? Je sais que je ne peux pas étendre PreferenceScreen, et je ne peux pas utiliser n'importe quel autre type de préférence dans ce cas, je veux seulement pouvoir éditer ma vue de texte personnalisée de ma disposition dans le code.Android Preferenceactivity getView

PreferenceScreen settings = getPreferenceManager().createPreferenceScreen(this); 

settings.setLayoutResource(R.layout.mypreference); 
View test = (View) settings.getView(null,getListView()); 

TextView text = (TextView)test.findViewById(R.id.text); 
text.setText("BLA BLA");  

Répondre

-2

Je ne fait foiré avec les vues d'un PreferenceActivity, mais voici quelque chose que je fais (habituellement pour ListPreferences)

ListPreference listPref; 
CheckBoxPreference cbPref; 

// Set the summary as the current listpref value 
listPref = (ListPreference) findPreference("list_pref_key"); 
listPref.setSummary(listPref.getEntry()); 

// change the title/summary/??? of any preference 
findPreference("anothe_pref_key").setTitle("New Title"); 
findPreference("anothe_pref_key").setSummary("New subtext for the view"); 

De cette façon, même si la mise en page utilisée par le changement PreferenceActivity/PreferenceFragment dans un future version, vous ne devrez rien changer dans votre code.

+0

ok, mais comment changer l'élément personnalisé, le titre et le résumé sont des méthodes android par défaut pour n'importe quelle préférence, et il existe des méthodes pour les remplir comme settitle et setsummary, mais comment edi t autres id? – ZZZ

+0

Quel genre d'autre id voulez-vous changer? Parce que généralement dans un écran de préférence, vous avez seulement le titre et le résumé – XGouchet

+0

oui et j'ai ma propre mise en page personnalisée définie par setLayoutResource, dans cette mise en page il y a des champs supplémentaires autres que le titre et le résumé, la définition du texte à textview dans xml fonctionne bien mais je dois changer de police sur ce textview, et je ne peux pas le faire par l'intermédiaire du xml – ZZZ

0

Utilisation de la mise en page personnalisée ci-dessous:

custom_preferences_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <Button 
     android:id="@+id/preview_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:layout_marginBottom="20dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:text="@string/notification_preview" /> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

En utilisant le fichier ci-dessus avec votre préférences utilisateur fichier xml, vous pouvez le faire pour accéder aux éléments dans votre mise en page personnalisée:

public class CustomPreferenceActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle bundle){ 
     super.onCreate(bundle); 
     addPreferencesFromResource(R.xml.custom_preferences); 
     setContentView(R.layout.custom_preferences_layout); 
    } 

    private void initCustomizePreferences(){ 
     //Button 
     Button button = (Button)findViewById(R.id.preview_button); 
     //Do something with the button. 

    } 

} 

J'espère que cette aide :)

8

Nous devraient être en utilisant getView(convertView, parent) mais d'innombrables sans réponses questions sur StackOverflow, il est évident on ne sait comment l'utiliser. Donc, notre seule option est de créer une coutume Preference:

Créer une nouvelle classe:

public class CustomPreference extends Preference { 
    public CustomPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onBindView(View rootView) { 
     super.onBindView(rootView); 

     View myView = rootView.findViewById(R.id.myViewId); 
     // do something with myView 
    } 
} 

Dans votrexml/preferences.xml, ajoutez votre préférence personnalisé:

<your.package.name.CustomPreference 
    android:key="custom_preference" 
    android:layout="@layout/custom_layout" /> 
+1

Suis-je le seul avec onBindView JAMAIS appelé? – Virthuss