草庐IT

android - 如果选项卡位置发生更改或通过调用 onPageChangeListener 关闭搜索 View

coder 2023-11-29 原文

我有一项 Activity 正在加载 6 个 fragment 。 三个 fragment 中的六个具有搜索 View ,其余三个 fragment 未实现搜索 View 。

我制作了两个menu.xml,其中

  • 一个有搜索 View 和commonitem的操作栏和其他
  • 一个没有搜索 View ,但包含常见项目

现在,如果我在第一个选项卡中展开搜索 View ,然后移至第二个选项卡,搜索 View 仍会打开(我知道这是第二个选项卡的搜索 View ,因为我已经为每个 fragment 实现了 onCreateOptionMenu()),我不想要。

我想要的是当我移动到第一个 fragment 到第二个或第三个 fragment 时,搜索 View 应该折叠并且只单击搜索 View (在当前 fragment 中它应该展开)。

此外,如果我移动到第一个 fragment 到第二个、第三个和第四个(我的帐户信息 fragment ,不包含操作栏中的搜索 View ),那么在第 4 个 fragment 中我仍然在打开模式下获得搜索 View ...

我想知道的另一件事是,通过单击搜索 View ,它会展开并弹出软键盘,这是搜索 View 的默认行为(展开并打开键盘)吗?

我想在单击搜索 View 的文本(编辑文本)区域时打开键盘。

希望我清楚.... 任何建议/链接将不胜感激...

如果您需要我提供更多详细信息,请告诉我......

编辑:

应用 S.D. 的解决方案

在 2.3.6 上测试

1)当我在第一个 fragment (First Tab)上

2)在同一个 fragment 中展开后::

3)移动到下一个 fragment (Tab,保持搜索 View 打开)::

在 4.2.1 上测试::

1)当我在第一个 fragment (First Tab)上

2)在同一个 fragment 中展开后::

3)移动到下一个 fragment (Tab,保持搜索 View 打开)::

我已经在我的容器 Activity 中设置了'setIconified(true)'(从我所有 fragment 所在的地方)在下面的方法中::

@Override
public void onPageSelected(int position)
{
    if (searchView!=null && !searchView.isIconified()) {  //true == searchView closed
        searchView.setIconified(true);  
        searchView.setIconified(true);  
    }
    actionBar.setSelectedNavigationItem(position);
}

@Override
public void onTabSelected(Tab tabposition, FragmentTransaction fragmentposition) {
    if (searchView!=null && !searchView.isIconified()) {  //true == searchView closed
        searchView.setIconified(true);  
        //searchView.setIconified(true);  
    }
    awesomePager.setCurrentItem(tabposition.getPosition());
}

最佳答案

要关闭您的SearchView,您可以使用searchview.setIconified(true)。所以在你的 fragment onPause 你可以调用:

 public void onPause() {  //not sure if you should use onDestroyView() instead
    super.onPause();

    if (!yourSearchView.isIconified()) {  //true == searchView closed
        yourSearchView.setIconified(true);  
    }
 }

SearchView 的自定义行为是显示您的键盘。如果单击搜索图标,SearchView 将自动弹出,搜索文本字段将聚焦,从而自动打开键盘。但是,您应该能够删除将关闭键盘的 textview 的焦点。 check here

关于android - 如果选项卡位置发生更改或通过调用 onPageChangeListener 关闭搜索 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771289/

有关android - 如果选项卡位置发生更改或通过调用 onPageChangeListener 关闭搜索 View的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  8. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  9. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  10. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

随机推荐