gpt4 book ai didi

android - 操作栏 Sherlock SearchView 在单击时不会扩展

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:02 25 4
gpt4 key购买 nike

我有一个 Sherlock fragment Activity ,我正在使用 fragment 寻呼机适配器从中设置不同的 sherlock fragment 。

现在要在每个 fragment 中显示搜索 View ,我已将此方法放在 Fragment::的 onCreate 中

此方法将在 fragment 的 ActionBar 中显示菜单项。

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

我现在也像这样设置了 onCreateOptionMenu()::

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);

inflater.inflate(R.menu.menu, menu);
final MenuItem searchItem = menu.findItem(R.id.menu_item_search);
final SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint("Search Here");
}

现在奇怪的事情发生了,在我的第一个 fragment 中我做了同样的事情并且搜索 View 成功打开。

如果

  • 我转到第一个 fragment ,打开搜索 View ,然后转到第二个
  • 将打开搜索 View 的 fragment 。

第三个 fragment 发生同样的事情

  • 转到第三个 fragment ,
  • 打开搜索 View ,
  • 回到第二个frgment,搜索 View 被打开。

但是如果我直接转到第二个 fragment ,搜索 View 不会打开。

希望我说清楚了。

有什么线索吗?任何建议/链接将不胜感激..

提前致谢...

编辑::

菜单.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item
android:id="@+id/menu_item_search"
android:icon="@drawable/abs__ic_search"
android:showAsAction="ifRoom|collapseActionView"
android:actionViewClass="com.actionbarsherlock.widget.SearchView"
android:title="Search Products">
</item>
<item
android:id="@+id/root_menu"
android:icon="@drawable/abs__ic_menu_moreoverflow_normal_holo_light"
android:showAsAction="always"
android:title="More">
<menu>
<item
android:id="@+id/menu_Home"
android:icon="@drawable/home"
android:showAsAction="never"
android:title="Home"/>
<item
android:id="@+id/menu_favourite"
android:icon="@drawable/favourite"
android:showAsAction="never"
android:title="Favourite"/>
<item
android:id="@+id/menu_Balance"
android:icon="@drawable/balance"
android:showAsAction="never"
android:title="Balance"/>
<item
android:id="@+id/menu_logout"
android:icon="@drawable/btn_logout"
android:showAsAction="never"
android:title="Logout"/>
</menu>
</item>

</menu>

逻辑猫::

    12-06 16:45:26.401: E/AndroidRuntime(1581): FATAL EXCEPTION: main
12-06 16:45:26.401: E/AndroidRuntime(1581): java.lang.ClassCastException: com.mobifin.subscriber.ButtonPayActivity
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.mobifin.subscriber.home.BillPayFragment.onCreateOptionsMenu(BillPayFragment.java:101)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.app.Watson.onCreatePanelMenu(Watson.java:55)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:560)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.internal.ActionBarSherlockCompat.preparePanel(ActionBarSherlockCompat.java:466)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.internal.ActionBarSherlockCompat.dispatchInvalidateOptionsMenu(ActionBarSherlockCompat.java:265)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.app.SherlockFragmentActivity.invalidateOptionsMenu(SherlockFragmentActivity.java:149)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.actionbarsherlock.app.SherlockFragmentActivity.supportInvalidateOptionsMenu(SherlockFragmentActivity.java:155)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.app.Fragment.setMenuVisibility(Fragment.java:726)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:127)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.view.ViewPager.populate(ViewPager.java:802)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1280)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1176)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1562)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.View.draw(View.java:6883)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.View.draw(View.java:6883)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.widget.FrameLayout.draw(FrameLayout.java:357)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewRoot.draw(ViewRoot.java:1522)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.os.Looper.loop(Looper.java:130)
12-06 16:45:26.401: E/AndroidRuntime(1581): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-06 16:45:26.401: E/AndroidRuntime(1581): at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:45:26.401: E/AndroidRuntime(1581): at java.lang.reflect.Method.invoke(Method.java:507)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-06 16:45:26.401: E/AndroidRuntime(1581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-06 16:45:26.401: E/AndroidRuntime(1581): at dalvik.system.NativeStart.main(Native Method)

最佳答案

我们通常使用 onCreateOptionsMenu() 为 fragment 和 Activity 创建选项菜单。如果您阅读文档,还有另一个名为 onPrepareOptionsMenu() 的辅助方法,根据文档,它是这样说的:

Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically modify the contents.

SearchView 当我们没有在 ViewPager 或任何类似选项卡(如切换场景)中实例化 fragment 时,展开/折叠工作正常。我曾经遇到过同样的问题。我想到了使用 onPrepareOptionsMenu() 来解决我的问题。

只需在每个 fragment 及其内部实现 onPrepareOptionsMenu(),调用 onQueryTextChange("") 传递 "" 作为查询字符串。它会建议 fragment 容器 Activity ,该 fragment 想要关注他自己的搜索业务。

或者,不确定,但是对容器 Activity 调用 invalidateOptionsMenu() 也可以派上用场。

如果有帮助,请告诉我。

编辑:

我的实现:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);

SearchView searchView = new SearchView(getActivity());
searchView.setQueryHint("Search for Events");
searchView.setOnQueryTextListener(this);

menu.add(0, ACTION_SEARCH, 0, "Search")
.setIcon(R.drawable.ic_mailbox_search)
.setActionView(searchView)
.setOnActionExpandListener(menuExpandListener)
.setShowAsAction(
MenuItem.SHOW_AS_ACTION_IF_ROOM
| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
onQueryTextChange("");
}

@Override
public boolean onQueryTextSubmit(String query) {
return true;
}

@Override
public boolean onQueryTextChange(String newText) {

if (mAdapter != null)
mAdapter.getFilter().filter(newText);
return false;
}

关于android - 操作栏 Sherlock SearchView 在单击时不会扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com