后退按钮不关闭搜索结果活动,我必须按几次才能返回主活动

  • 本文关键字:活动 几次 返回 按钮 搜索结果 android
  • 更新时间 :
  • 英文 :


我在工具栏中创建了搜索界面,每件事都很好,当我按下工具栏中的后退按钮时,它工作得很好,回到了主活动,但当我按下硬件后退按钮时我必须按下几次,直到回到主活动:

这是我的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));
    }

最新更新