如何管理以前的SearchView搜索堆栈并通过“向上”按钮访问它们?

时间:2013-08-01 20:09:46

标签: android android-actionbar searchview android-support-library droidquery

我正在开发一个简单的应用程序,该应用程序使用droidQuery来发送网络请求以从各种网站获取公共流数据。该项目的要求包括支持 API 8 ,以及 ActionBar 。而不是使用 ActionBarSherlock ,我想我会试试 android-support-v7-appcompat 库中的兼容性 ActionBar 。这在大多数情况下都运行良好,但我无法处理 Up 按钮以导航到以前的搜索(在公共流上搜索用户)。这就是我所拥有的:

  

请注意,这是一个精简版本,但缺少一些方法(尽管我已在我的代码中实现了这些方法)。

public class PublicStreamClient extends ActionBarActivity implements OnQueryTextListener, OnSuggestionListener, OnPullToRefreshListener {
    private Stack<SearchStackItem> previousSearches;//initialized in onCreate
    private class SearchStackItem {
        public String query;
        public SearchStackItem(String query) {
            this.query = query;
        }
    }

    //called when the user searches a network with the given string
    public void search(final String query, final boolean addToStack) {
        //do search using given query String
        //once completed successfully, add the search to the stack:
        previousSearches.add(new SearchStackItem(query));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home: {
                Log.d(TAG, "Home Pressed");//Never reached!
                if (!previousSearches.isEmpty()) {
                    SearchStackItem search = previousSearches.pop();
                    search(search.query, false);
                    return true;
                }           
                break;
            }
            default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.reddit_client, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);

        searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setQueryHint("Search user name...");
        searchView.setOnQueryTextListener(this);
        searchView.setOnSuggestionListener(this);
        searchView.setBackgroundColor(Color.BLACK);
        setSuggestionsEnabled(true);//sets up the suggestions cursor

        searchView.setQuery("", false);
        search(null, false);

    return super.onCreateOptionsMenu(menu);
    }
}

这是我的XML菜单,它将SearchView添加到活动:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:rc="http://schemas.android.com/apk/res-auto" >

    <item android:id="@+id/action_search"
          android:title="@string/action_search"
          android:icon="@android:drawable/ic_menu_search"
          rc:showAsAction="ifRoom|collapseActionView"
          rc:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

这种方法在逻辑上很有意义,但是当我点击 Up 按钮时,SearchView只是关闭,我从未看到输出“Home Pressed”。我需要做些什么才能使其正常工作?我正在寻找一个使用兼容性ActionBar而不是ActionBarSherlock 的答案,而不是使用原生ActionBar来获得更高的API。


我尝试过的事情包括Clicking app icon doesn't trigger onOptionsItemSelected()(关于支持库的答案中的评论之后),但这也没有做到。

我也偶然发现了getSupportActionBar().setHomeButtonEnabled(true)这个也没有结果的电话。在进行一些测试时,似乎单击向上按钮不会回调onOptionsItemSelected

1 个答案:

答案 0 :(得分:1)

这是一个错误的错误,即没有进行正确的Stack来电。

previousSearches.add(new SearchStackItem(query));

应该是

previousSearches.push(new SearchStackItem(query));