android:widgetLayout
フィールドにButton
を含むカスタムPreference
を作成しました。このボタンを押したときに特定のアクションをトリガーしたいのですが、クリックイベントを受け取るためにリスナーを取得するのに問題があります。私はボタンや好みの行をクリックしたときにクリックイベントをカスタム設定で登録できません
@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");
}
}
がOnPreferenceClickListener
がトリガーされることはありません、とボタンの表示を見つけようとするときonCreateView
実装がNullPointerException
がスローされます。ここでは、私が試したものです。
このボタンがクリックされたとき、どのように聞きますか?参考のため、ここでは関係XMLファイルは、次のとおりです。
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" />
編集:私はのフィールドを使用して解決策を見つけましたボタンをクリックしてください。しかし、可能であれば、まだPreference
を使用したソリューションが欲しいです。 @Sushanth Raghuthamanは少し答える更新
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;
}
}
私は何を試したと違うのですか? –