我有一个带有几个片段的PreferenceActivity:
R.xml.preferences :(缩短以提高可读性):
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="fragments.Fragment1" android:id="@+id/fragment1" [...] />
<header android:fragment="fragments.Fragment2" android:id="@+id/fragment2" [...] />
[...]
</preference-headers>
Run Code Online (Sandbox Code Playgroud)
设置活动:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
}
}
Run Code Online (Sandbox Code Playgroud)
这将显示一个列表条目fragments.Fragment1,fragments.Fragment2,...如果SettingsActivity被启动.
但是现在我想传递一个Bundle,以便在启动活动时打开一个特定的PreferenceFragment:
所以我把它添加到了SettingsActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null && savedInstanceState.getBoolean("shortcut")) {
// directly jump to fragments.Fragment1
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过加载片段getFragmentManager().findFragmentById(R.id.fragment1),但这会返回null.但即使我有正确的实例,我也不知道如何调用它.此外,调用loadHeadersFromResource(R.xml.preferences_fragment1, target);不起作用 - …
假设我有一个匿名的PHP函数,如下所示:
<?php
$l = function() { echo "hello world"; };
Run Code Online (Sandbox Code Playgroud)
是否有可能获得匿名函数的字符串表示$l,即包含函数体的字符串?
我试了几件事:
echo $l; PHP Catchable致命错误:类Closure的对象无法转换为字符串var_dump($l); 类闭包#1(0){}echo $l->__toString();:调用未定义的方法Closure :: __ toString()get_class_methods($l)返回array('bind', 'bindTo'),所以似乎没有未记录的方法$r = new ReflectionClass($l);:getProperties(),getConstants()和getStaticProperties()都是空的,也$r->__toString()没有返回任何有用的东西.我在代码中并不需要这个,我只是认为如果出现问题可能对日志记录有用.在我无法自己提出解决方案后,我很好奇是否有可能.
我按照Android API指南中的说明设置了SearchWidget .它在操作栏中正确显示放大镜图标,如果我单击它,它会在操作栏(具有深色背景的输入字段)中启动搜索窗口小部件.
但是,如果我按下虚拟设备的搜索按钮,则会启动另一个搜索字段:它具有白色背景,并且不会调用我指定的回调方法.
所以我把它添加到我的MainActivity类:
public boolean onSearchRequested() {
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setIconified(!searchView.isIconified());
return false;
}
Run Code Online (Sandbox Code Playgroud)
搜索小部件的设置与文档中描述的完全相同:
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new CustomSearchQueryTextListener());
Run Code Online (Sandbox Code Playgroud)
我的searchable.xml:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name">
</searchable>
Run Code Online (Sandbox Code Playgroud)
和AndroidManifest.xml:
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:uiOptions="splitActionBarWhenNarrow" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
</activity>
Run Code Online (Sandbox Code Playgroud)
我尝试使用setIconfied()方法的原因是,在Android API指南中,它说"切换搜索框可见性的能力":
"默认情况下,搜索小部件是"图标化",意味着它仅由搜索图标(放大镜)表示,并在用户触摸时展开以显示搜索框.如上所示,您可以显示搜索默认情况下,通过调用setIconifiedByDefault(false).您还可以通过调用setIconified()来切换搜索小部件外观."
我也试着打电话startSearch("", false, null, false);但这会带来与白色背景相同的搜索字段.
所以我的问题是:如果用户按下设备的搜索按钮,是否可以在操作栏中启动搜索小部件,即执行与单击搜索菜单项完全相同的操作?