2012-04-12 18 views
0

Ich habe eine benutzerdefinierte Preference erstellt, die ein Button für das Feld android:widgetLayout enthält. Ich möchte eine bestimmte Aktion auslösen, wenn diese Schaltfläche gedrückt wird, aber ich habe Probleme, einen Listener zum Aufnehmen von Klickereignissen zu bekommen. Hier ist, was ich versucht habe:Click-Ereignis kann nicht mit einer benutzerdefinierten Einstellung registriert werden.

@Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preference_account); 

     Preference signOutPreference = findPreference("sign_out"); 
     signOutPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

      @Override 
      public boolean onPreferenceClick(Preference preference) { 

       Log.i(TAG, "Click"); 
       return false; 
      } 
     }); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View root = super.onCreateView(inflater, container, savedInstanceState); 
     root.findViewById(R.id.preference_signOut_Button).setOnClickListener(new OnSignOutClickListener()); 

     return root; 
    } 

    private class OnSignOutClickListener implements OnClickListener { 

     @Override 
     public void onClick(View v) { 

      Log.i(TAG, "Click"); 
     } 
    } 

Die OnPreferenceClickListener wird nie ausgelöst, wenn ich die Taste oder die Präferenz Zeile klicken und die onCreateView Implementierung wirft ein NullPointerException bei dem Versuch, auf die Schaltfläche Ansicht zu finden.

Wie höre ich zu, wenn diese Schaltfläche angeklickt wird? Als Referenz sind hier die entsprechenden XML-Dateien:

preference_account.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <Preference 
     android:key="sign_out" 
     android:persistent="false" 
     android:summary="[email protected]" 
     android:title="Signed in as:" 
     android:widgetLayout="@layout/sign_out_button" /> 

</PreferenceScreen> 

sign_out_button.xml

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/preference_signOut_Button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Sign Out" /> 

Edit: Ich habe eine Lösung mit dem Bereich der gefunden Knopf, aber ich möchte immer noch eine Lösung mit Preference wenn möglich.

Antwort

0

Vielleicht könnten Sie das unten stehende Beispiel versuchen:

class MyOnPreferenceClickListener implements OnPreferenceClickListener { 
private Activity activity; 
private static final String TAG = "ABCDEFGH..."; 

public MyOnPreferenceClickListener(Activity activity) { 
    this.activity = activity; 
} 

@Override 
public boolean onPreferenceClick(Preference preference) { 
    Log.i(TAG, "Click on Item " + preference.getKey()); 
    return true; 
} 
} 
+1

Wie ist das anders als das, was ich ausprobiert habe? –

0

aktualisiert @Sushanth Raghuthaman ein wenig beantworten. Dieser arbeitete für mich:

public class CustomPreference extends Preference implements OnPreferenceClickListener { 

    public CustomPreference(Context context) { 
     super(context); 
     setOnPreferenceClickListener(this); 
    } 

    public CustomPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setOnPreferenceClickListener(this); 
    } 

    public CustomPreference(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setOnPreferenceClickListener(this); 
    } 

    public boolean onPreferenceClick(Preference preference) { 
     //Do something here... 
     return true; 
    } 

} 

Die wichtige Zeile oben ist die Präferenz, klicken Sie einfach selbst setOnPreferenceClickListener (diese) zu registrieren;.

Verwandte Themen