2012-04-12 19 views
0

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

答えて

0

たぶん、あなたは以下の例を試みることができます。これが私の仕事:

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(これを)優先クリックを登録することです。

+1

私は何を試したと違うのですか? –

0

関連する問題