2012-04-12 183 views
0

我已經構建了一個自定義Preference,其中包含字段的Button。我想在按下此按鈕時觸發特定操作,但我無法讓聽衆接聽點擊事件。以下是我已經試過:無法使用自定義首選項註冊點擊事件

@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的解決方案。

回答

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

與我試過的有什麼不同? – 2012-07-18 15:26:36

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(本);