【问题标题】:Hit Back button 3 times to go back to Main Activity点击返回按钮 3 次返回主活动
【发布时间】:2013-06-25 02:28:55
【问题描述】:

我有一个主要活动,我可以启动对可搜索活动的搜索。我还可以在我的搜索活动中发起搜索。所以我的可搜索活动的启动模式是 singleTop。

如果我在主要活动中进行搜索,我可以通过单击返回按钮一次从可搜索活动返回到主要活动。现在的问题是在主活动中第一次搜索之后,如果我在我的 可搜索活动 中进行另一次搜索,我需要点击返回按钮 三次 才能返回主要活动。我不确定我的代码中遗漏了什么。

Android 清单

    <activity 
        android:name=".SearchableActivity"
        android:launchMode="singleTop" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data 
            android:name="android.app.searchable"
            android:resource="@xml/searchable"/>
    </activity>

可搜索的活动

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listview);
    getListView().setEmptyView(findViewById(R.id.lblNoResults));
    db = new StoreDB(SearchableActivity.this);

    onPostExecute();
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    setContentView(R.layout.activity_listview);
    getListView().setEmptyView(findViewById(R.id.lblNoResults));
    db = new StoreDB(SearchableActivity.this);

    onPostExecute();
    setIntent(intent);
}

@Override
public void onDestroy() {

    super.onDestroy();
    db.close();
}

我在可搜索活动中有 onDestroy。谢谢。

【问题讨论】:

  • 你好,我也遇到了同样的问题,你解决了吗?

标签: android search android-intent back


【解决方案1】:

问题在于,您在返回 MainActivity 时没有完成 SearchableActivity。

SearchableActivity 中的onBackPressed 方法覆盖为:

 @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        finish();
    }

希望对你有帮助。

【讨论】:

  • 我已将此添加到我的可搜索活动中,但我仍需要按三下“后退”按钮。
  • Activity 应该在按下后退按钮时完成。所以,除非finish() 有额外的工作要做,否则这不是必要的
【解决方案2】:

您可以添加标志FLAG_ACTIVITY_REORDER_TO_FRONT 来启动您的SearchActivity。如果已经有它的实例,这会将 Activity 放在前面,这样您就不必一直支持其他实例。

另外,可能与你的问题无关,但你为什么有

onPostExecute();

onCreate()?这是你自己的方法还是AsyncTask的方法?如果它在AsyncTask 中,那么您不应该这样做。根据docs

不要手动调用 onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...)。

你应该让它在doInBackground()完成时被调用

【讨论】:

  • 这不是问题。当我点击后退按钮时,它不会转到其他实例。在我第三次点击按钮之前,它不会回到主要活动......
  • onPostExecute 是我自己的搜索方法。
  • 你确定,你试过了吗?如果你从同一个Activity 调用SearchActivity,那么它将创建一个新实例......除非我不明白你在做什么
  • 好的,我建议更改名称,以免造成混淆。我不认为使用已经是 Android 框架一部分的函数名称是一种好的做法,但这只是我的看法
  • 好的,我有一些东西要补充。在可搜索活动中进行搜索后,重点是搜索词。所以我第一次点击返回按钮时,焦点转到操作栏。我第二次点击后退按钮时,焦点消失了。所以当我第三次点击后退按钮时,它只会回到主要活动。
【解决方案3】:

试试这个代码....

你用 super.onBackPressed() 覆盖 onBackPressed() 方法。

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    finish();
}

用于检测 super.onBackPressed() 的默认背压。 因此,按下返回按钮后,您的 current Activity 将使用 finish() 完成。

【讨论】:

    【解决方案4】:

    也许你可以检查this,我也遇到了同样的问题,最后我偶然发现了这个解决方案。我不确定它是否适合您,但您可以尝试一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2020-12-29
      • 2012-05-12
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多