我想检测点击Preference
中包含的ListView
的时间,以便我可以启动管理该选择的意图。
我会在我的布局XML
文件中这样做:
<Preference android:title="About" android:key="myKey"></Preference>
以下java
代码:
Preference myPref = (Preference) findPreference("myKey");
myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
//open browser or intent here
}
});
但方法public Preference findPreference (CharSequence key)
已被弃用。
Fragments
如何帮助我更好地完成任务?请在这里查看:Preferences without deprecated methods。在这里,您可以查看我的活动所具有的XML
布局结构,以及应用程序的快照:
XML:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
android:key="about"
android:title="@string/titleAbout"
android:summary="@string/summaryAbout"
/>
<Preference
android:key="labelTaxonomy"
android:title="@string/titleLabelTaxonomy"
android:summary="@string/summaryLabelTaxonomy"
/>
</PreferenceScreen>
快照:
点击关于(或访问标签分类标准)Preference
后,我想打开某种intent
(也可能是视频或其他任何内容......名称是误导)。
答案 0 :(得分:60)
是否有未弃用的等价物?
如果您在API Level 11以上设备上使用PreferenceFragment
,则可以在其上调用findPreference()
。否则,请在findPreference()
上致电PreferenceActivity
,因为您别无选择。
如果没有,如果我还是使用它会怎么样?
它会起作用。
片段如何帮助我以更好的方式完成任务?
API Level 11+引入PreferenceFragment
作为构建PreferenceActivity
内容的另一种方式。我们欢迎您使用它们,但如果您仍在使用旧设备,则无法将PreferenceFragment
用于这些设备。
话虽如此:
我想检测单击ListView中包含的Preference的时间,以便我可以启动管理该选择的意图。
您不需要Java代码。使用:
<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>
(见JavaDocs for PreferenceActivity
)
这将在首选项UI中创建一个条目,单击该条目时,将启动具有指定Intent
的活动。
答案 1 :(得分:4)
如果你使用片段,你可以使用方法&#34; findPreference()&#34;在偏好片段的基础上。
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
}
});
}
}
答案 2 :(得分:1)
可能docs链接不清楚。但使用该功能非常简单。例如,你可以将它用作这样的推特页面
<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>
它不需要任何java代码。感谢CommonsWare!
答案 3 :(得分:0)
2018更新
今天,onPreferenceTreeClick
方法为此目的必须在“首选项”片段中被覆盖。例如:
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;
}
}