我在工具栏中创建了搜索界面,每件事都很好,当我按下工具栏中的后退按钮时,它工作得很好,回到了主活动,但当我按下硬件后退按钮时我必须按下几次,直到回到主活动:
这是我的MainActivity
:
import android.app.SearchManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import app.bahaltarinha.com.R;
public class MainActivity extends AppCompatActivity {
//===================================================== onCreateMethod()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setupToolbar
setUpToolbar();
}
//===================================================== setupToolbar Method()
private void setUpToolbar() {
Toolbar mainToolbar = (Toolbar)findViewById(R.id.xmlToolbarMain);
setSupportActionBar(mainToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.mipmap.ic_menu);
}
//===================================================== onCreateOptionsMenu Method()
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main , menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.action_search_toolbar);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
return true;
}
//===================================================== onOptionsItemSelected Method()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_search_toolbar:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
这就是SearchResultActivity
:
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import app.bahaltarinha.com.R;
/**
* Created by majid on 1/8/2016.
*/
public class SearchResultsActivity extends AppCompatActivity {
private TextView txtSearchQuery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
setUpToolbar();
txtSearchQuery = (TextView)findViewById(R.id.txtSearchQuery);
handleIntent(getIntent());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchItem = menu.findItem(R.id.action_search_toolbar);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(true);
return true;
}
private void setUpToolbar() {
Toolbar mainToolbar = (Toolbar)findViewById(R.id.xmlToolbarSearchActivity);
setSupportActionBar(mainToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if(Intent.ACTION_SEARCH.equals(intent.getAction())){
String query = intent.getStringExtra(SearchManager.QUERY);
doSearchQuery(query);
}
}
private void doSearchQuery(String query) {
txtSearchQuery.setText(query);
}
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
}
这是androidManifest
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.bahaltarinha.com">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- MainActivity -->
<activity android:name=".activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.default_searchable"
android:value=".activities.SearchResultsActivity"/>
</activity>
<!-- Search Results Activity -->
<activity
android:name=".activities.SearchResultsActivity"
android:label="@string/app_name"
android:parentActivityName=".activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
</application>
</manifest>
尝试从SearchResultsActivity.JAVA中删除以下代码。您无需定义它。默认情况下,当您按下返回键时,系统将自动完成当前活动。
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
并且该活动不需要清单中的意图过滤器。请把它们也移走。
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
希望这能帮助你。。!!
好的,我找到了解决方案,我们应该使用目的:
我们应该在SearchResultActivity:中使用onBackPressed()
进行编写
@Override
public void onBackPressed() {
startActivity(new Intent(SearchResultsActivity.this , MainActivity.class));
}