Non Deprecated findPreference() Method? - Android

前端 未结 4 1399
梦毁少年i
梦毁少年i 2020-12-02 20:22

I want to detect when a Preference contained in a ListView gets clicked, so that I can launch an intent to manage that selection.

I would h

相关标签:
4条回答
  • 2020-12-02 20:28

    Is there a non deprecated equivalent?

    If you are using PreferenceFragment on API Level 11+ devices, you would call findPreference() on it. Otherwise, call findPreference() on your PreferenceActivity, as you have no choice.

    If not, what if I use it anyway?

    It will work.

    How can Fragments help me do my task in a better way?

    API Level 11+ introduced PreferenceFragment as another way of constructing the contents of a PreferenceActivity. You are welcome to use them, but if you are still supporting older devices, you cannot use PreferenceFragment for those devices.

    That being said:

    I want to detect when a Preference contained in a ListView gets clicked, so that I can launch an intent to manage that selection.

    You do not need Java code for this. Use:

        <PreferenceScreen
                android:title="@string/title_intent_preference"
                android:summary="@string/summary_intent_preference">
    
            <intent android:action="android.intent.action.VIEW"
                    android:data="http://www.android.com" />
    
        </PreferenceScreen>
    

    (as seen in the JavaDocs for PreferenceActivity)

    This will create an entry in the preference UI that, when clicked, will start an activity with the specified Intent.

    0 讨论(0)
  • 2020-12-02 20:35

    2018 UPDATE Today, the onPreferenceTreeClick method has to be overriden in the Preference fragment for this purpose. For example:

    public class MySettingsFragment extends PreferenceFragment {
    
        @Override
        public boolean onPreferenceTreeClick (PreferenceScreen preferenceScreen,
                                              Preference preference)
        {
            String key = preference.getKey();
            if(key.equals("someKey")){
                // do your work
                return true;
            }
            return false;
        }
    }
    
    0 讨论(0)
  • 2020-12-02 20:43

    maybe docs link are not clear. But using that feature is very simple. for example, you can use that as a twitter page like this

    <PreferenceCategory android:title="Share" >
     <PreferenceScreen
            android:title="Twitter"
            android:summary="Follow me at Twitter">
    
        <intent android:action="android.intent.action.VIEW"
                android:data="https://twitter.com/" />
    
    </PreferenceScreen>
    </PreferenceCategory>
    

    it doesnt need any java code. Thanks to CommonsWare!

    0 讨论(0)
  • 2020-12-02 20:47

    If you use fragments, you can use the method "findPreference()" on the basis of a preferences fragment.

    public class CustomActivity extends PreferenceActivity {
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_custom);
    
          CustomFragment customFragment = (CustomFragment) getFragmentManager().findFragmentById(R.id.custom_fragment);
          EditTextPreference textPreference = (EditTextPreference) customFragment.findPreference("preference_key");
    
          textPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
             public boolean onPreferenceClick(Preference preference) {
                 //open browser or intent here
             }
         });
      }
    }
    
    0 讨论(0)
提交回复
热议问题