7
votes

Changer de manière dynamique la ressource Widgetlayout de la préférence Android

J'ai créé une entrée de préférence à l'intérieur de l'écran de préférence, qui ressemble à ceci: xxx

ici, je définit un widgetlayout ressource, qui doit être montré à la droite de L'élément de préférence (comme une case à cocher pour une préférence de case à cocher). Je peux également définir cette ressource dans le code de mon préfèceActivit.oncreate () comme ceci: xxx

Les deux approches fonctionnent bien, donc je peux voir mon ressource à droite de l'élément de préférence. Cependant, je ne peux pas accéder à cette ressource (aView) pour modifier ses propriétés sur l'exécution.

Neu à la définition manuelle ID de ressource, gonflez-la de la ressource ou FindvevyID semble fonctionner - J'ai une source de ressource / ressource invalide non trouvée. On dirait que l'activité de préférence gonfle la ressource plusieurs fois plus tard.

Quelqu'un est-il rencontré dans le même problème? Toutes idées sur la façon de modifier widgetlayout Propriétés de la ressource sur l'exécution?

Voici une question similaire, mais elle n'a pas été répondue


0 commentaires

3 Réponses :


13
votes

Je semble avoir le même problème, et j'ai essayé comme ceci:

1) Fabriquez une préférence personnalisée code> et de remplacement onbindview () code>: h3> xxx pré>

2) ajoutez cette préférence à l'écran XML: h3> xxx pré>

préférence_widget_progressbar.xml p> xxx pré >

ou appeler SetWidgetLayouTresource () code>. p>

3) Obtenez la barre de progression lorsque Onpereffetreeclick () Code>: H3>
if (preference instanceof ProgressBarPreference) {
    ProgressBar progressBar = ((ProgressBarPreference) preference).getProgressBar();
    // TODO something
}


0 commentaires

2
votes

J'ai une solution de contournement partielle pour JOINAINERO . Si l'objectif est de simplement afficher ou masquer une barre de progression indéterminée dans le widget, l'astuce consiste à définir et à effacer la ressource de mise en page de widget dans le code.

1) Définissez la disposition du widget contenant la barre de progression. Pas besoin d'attribuer un identifiant. préférence_widget_progressar.xml: p> xxx pré>

2) Ne spécifie pas le widget dans paramètres.xml p> xxx pré>

3) lorsque vous Voulez-vous montrer la barre de progression, définissez la ressource de widget sur préférences_widget_progressbar. Pour le nettoyer, définissez-le à 0. L'appel à notifychanged () code> est nécessaire pour mettre à jour l'écran. P>

public void showProgressBar(boolean isVisible) {
    // Show or hide the entire widget (which contains only a ProgressBar)
    setWidgetLayoutResource(isVisible ? R.layout.preference_widget_progressbar: 0);
    notifyChanged();    // Update screen
}


0 commentaires

1
votes

Attribut OnClick, P>

public void onMyKeyClicked(View v) {
    Toast.makeText(this, "My key widget clicked",
       Toast.LENGTH_SHORT).show();
}


0 commentaires