- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家早上好,我正在尝试通过实现 SearchView
在具有搜索功能的单个 Activity 中实现搜索功能。从 UI 端来看,一切正常。但与我发现的几乎所有示例不同的是,SearchView
不会启动另一个 Activity ,而是应该向名为 HomeActivity 的单个正在运行的 Activity 发送请求。
根据我在 Android 开发者网站和其他来源上找到的一些文档,我尝试按照以下方式进行操作。通常,我应该在“onNewIntent
”事件中处理搜索请求,但它从未被调用过。输入文本后单击按钮无效(它只是关闭键盘)。
我是 Android 开发的初学者,可能错过了一些简单的东西。你能帮帮我吗?
主页 Activity
public class HomeActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
private FrameLayout myFrameLayout;
private Fragment fragmentContracts, fragmentHardware, fragmentMaps, fragmentUsers;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
// Switch to fragment ...
}
return loadFragment(fragment);
}
};
private void handleIntent(Intent intent) {
Log.i("LOG_myapp", "Called new intent !!!");
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
String msg = MessageFormat.format("Search query = {0}", query);
Log.i("LOG_myapp", msg);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(query)
.setTitle("Search request");
AlertDialog dialog = builder.create();
dialog.show();
}
}
@Override
protected void onNewIntent(Intent intent){
// *** NEVER CALLED :( ***
Log.i("LOG_myapp", "Event onNewIntent raised");
handleIntent(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
myFrameLayout = (FrameLayout)findViewById(R.id.MyFrameLayout);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
Fragment defaultFragment = new places();
defaultFragment.setRetainInstance(true);
loadFragment(defaultFragment);
Toolbar toolbar = (Toolbar)findViewById(R.id.activity_main_toolbar);
setSupportActionBar(toolbar);
handleIntent(getIntent());
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.application, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.MenuItemSearch).getActionView();
searchView.setSubmitButtonEnabled(true);
ComponentName componentName = new ComponentName(this, HomeActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case R.id.MenuItemSettings:
Intent intent = new Intent(this, preferences.class);
startActivity(intent);
break;
}
return true;
}
@Override
public boolean onQueryTextChange(String s){
Log.i("LOG_myapp","Search query: " + s);
return true;
}
@Override
public boolean onQueryTextSubmit(String s){
Log.i("LOG_myapp","Submitted search query: " + s);
return true;
}
private boolean loadFragment(Fragment fragment) {
//switching fragment
if (fragment != null) {
try {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.MyFrameLayout, fragment);
transaction.addToBackStack(null);
transaction.commit();
return true;
}
catch (Exception ex)
{
return false;
}
}
return false;
}
菜单.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/MenuItemSearch"
android:title="Search"
android:icon="@drawable/baseline_search_white_18dp"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:id="@+id/MenuItemSettings"
android:icon="@drawable/baseline_settings_white_18dp"
app:showAsAction="always"
android:title="Settings"/>
</menu>
AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.vermilionenergy.myapp">
<!--
The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
Google Maps Android API v2, but you must specify either coarse or fine
location permissions for the 'MyLocation' functionality.
-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".HomeActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<!--action android:name="android.intent.action.MAIN" /-->
<action android:name="android.intent.action.SEARCH"/>
<category android:name="android.intent.category.DEFAULT" />
<!-- category android:name="android.intent.category.LAUNCHER" / -->
</intent-filter>
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/>
<meta-data android:name="android.app.default_searchable" android:value=".HomeActivity" />
</activity>
<meta-data android:name="android.app.default_searchable" android:value=".HomeActivity" />
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".maps"
android:label="@string/title_activity_maps" />
<activity
android:name=".preferences"
android:label="Preferences" />
<!-- activity android:name=".users" / -->
<activity android:name=".SplashScreenActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TextActivity"></activity>
</application>
</manifest>
searchable.xml
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="myapp"
android:hint="Search items"
>
</searchable>
最佳答案
我终于自己找到了解决方案。searchable.xml 中的直接字符串似乎不起作用。我用下面的变量替换了它们,它起作用了:)
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_title"
android:hint="@string/search_hint"
>
</searchable>
关于java - Android - SearchView 在单个 fragment Activity 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52720091/
我的 Activity 的主要内容区域中有一个 SearchView。 我需要覆盖我的 style.xml 文件中的 SearchView 样式(这样我就可以删除 SearchView 的下划线 -
我正在使用 Firebase-UI 的 FirebaseRecyclerAdapter。我无法在 SearchView 中实现过滤器。 我的数据库: 我的问题: 如何使用 FirebaseRecycl
我正在尝试以编程方式删除 SearchView 提示中的图标所占用的空间,但由于某种原因它不会消失。 此代码使图标不可见,但不会删除空格: try { Field mDrawa
我想在用户未输入任何内容时在 SearchView 中显示一些默认建议。我正在使用矩阵光标手动设置我的自定义建议适配器。我尝试在 onFocusChange 和 onClickListner 中设置适
如何删除或更改编辑文本中的搜索 View 图标?我正在使用 Appcompat 库。 我使用下面的代码修改和删除但它不起作用: SearchManager searchManager = (Searc
当我启动我的应用程序时,会引发以下错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 5513 jav
在我的应用程序中使用 SearchView。 无论如何我可以延迟对 onQueryTextChange() 方法的调用。例如,当用户键入一系列字符时,他必须等待此方法被调用。 此等待应该不取决于键入的
我正在尝试从 Fragment 中的工具栏获取我的 SearchView。 我在 onCreateOptionsMenu 中引入了一个菜单项。 问题:searchItem.getActionView(
我不确定为什么会收到此错误。这是有问题的菜单: 这是根据 developer guide 的可搜索配置. 添加到我的 list 文件中: 我在新的搜索 Activity 中也有一个
我是一名开发 Android 应用程序的新手,以下是该应用程序的第一个屏幕。我希望我的应用程序使用该搜索对话框执行搜索。 为此,我关注了http://developer.android.com/gui
我正在 CustomAdapter 上执行 SearchView,它将在其中搜索门名称。在我尝试运行该应用程序后,它突然崩溃并给我如上所述的错误。我不知道我什至做错了哪一部分导致我每次尝试运行我的应用
您好,我需要在 searchView 中放置一些文本并聚焦/展开 searchView 小部件。 这是我尝试过的,但它不起作用 @Override public boolean onCreateOpt
所以当我遇到错误“无法解析类 SearchView”时,我试图在我的应用程序中包含一个搜索栏。谷歌没有帮助,所以我来到这里。这是我的代码: 其余的 xml 已正确完成,我直接从 android 获取
我的搜索 View 有问题。 我有 2 个主题,当我第一次接触 searchview 时,我得到了丑陋的第一张图片。但是当我再次进入搜索 View 时,我从第二张图片中得到了很好的主题。 我总是想走第
我使用的不是 menuItem 而是布局中的搜索 View 。我支持的最低 API 级别是 9,搜索 View 是 11。 现在我这样创建了我的搜索 View : 在直线布局中。我注意到警告,所以
我在 here 中解决了我的问题之后当我在搜索框中输入文本时,搜索过滤器仍然不起作用。 这是我的代码: package intikom.streammobile.Customer; import an
我正在创建类似于屏幕上的 Activity 。我在工具栏中阅读了许多关于 SearchView 的教程,并在我的 Activity 中实现了它并且它有效(上面的代码)。但是如何制作这个下拉列表呢?感谢
我按照 Android 的官方说明在工具栏中实现了 SearchView。 SearchView 本身工作得很好,但是当我点击搜索图标时,它会向左移动,而不是显示搜索提示和关闭按钮,尽管如果我单击这个
Android Studio 3.2.1 在我的app / build.gradle中: android { compileSdkVersion 28 defaultConfig {
我有一个 RecylerView,它有 SearchView 小部件和包含复选框和玩家名称的项目列表。当我滚动项目并选择项目复选框时没有问题。但是,当我通过名称搜索项目然后选择它们时,就会出现问题,当
我是一名优秀的程序员,十分优秀!