小编Mic*_*Osl的帖子

如何从PreferenceActivity调用特定的PreferenceFragment?

我有一个带有几个片段的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);不起作用 - …

android android-preferences android-fragments

12
推荐指数
1
解决办法
1万
查看次数

获取匿名函数的字符串表示形式

假设我有一个匿名的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()没有返回任何有用的东西.

我在代码中并不需要这个,我只是认为如果出现问题可能对日志记录有用.在我无法自己提出解决方案后,我很好奇是否有可能.

php closures anonymous-function

9
推荐指数
1
解决办法
2301
查看次数

如果用户按下设备的搜索按钮,则在ActionBar中显示SearchWidget

我按照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);但这会带来与白色背景相同的搜索字段.

所以我的问题是:如果用户按下设备的搜索按钮,是否可以在操作栏中启动搜索小部件,即执行与单击搜索菜单项完全相同的操作?

android android-widget android-searchmanager

8
推荐指数
1
解决办法
3672
查看次数