1

フィールドのをPreference含むカスタムを作成しました。このボタンが押されたときに特定のアクションをトリガーしたいのですが、リスナーがクリック イベントを取得するのに問題があります。これが私が試したことです:Buttonandroid:widgetLayout

    @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 ファイルを次に示します。

Preferences_account.xml

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

    <Preference
        android:key="sign_out"
        android:persistent="false"
        android:summary="account@email.com"
        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" />

編集:ボタンのフィールドを使用して解決策を見つけましたが、可能であればandroid:onClick使用して解決策を希望します。Preference

4

2 に答える 2

0

たぶん、以下の例を試すことができます:

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;
}
}
于 2012-07-18T14:28:32.277 に答える
0

@Sushanth Raghuthamanの回答を少し更新します。これは私のために働いた:

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;
    }

}

上記の重要な行は、設定クリックをそれ自体で登録することですsetOnPreferenceClickListener(this); .

于 2013-03-07T15:05:22.170 に答える