点击返回按钮3次返回主要活动

时间:2013-06-27 14:18:52

标签: android search android-intent back

我有一项主要活动,我可以开始搜索可搜索的活动。我也可以在我的搜索活动中启动搜索。所以我的可搜索活动的启动模式是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。谢谢。

4 个答案:

答案 0 :(得分:0)

问题是因为您在返回MainActivity时没有完成SearchableActivity。

onBackPressed中的SearchableActivity方法覆盖为:

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

希望它有所帮助。

答案 1 :(得分:0)

您可以添加标记FLAG_ACTIVITY_REORDER_TO_FRONT以启动SearchActivity。如果已经有Activity实例,那么这会将onPostExecute(); 带到前面,这样您就不必继续支持其他实例。

此外,可能与您的问题无关,但为什么有

onCreate()
AsyncTask中的

?这是您自己的方法还是AsyncTask的方法?如果它在doInBackground(),那么你不应该这样做。根据{{​​3}}

  

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

{{1}}完成后应该让它被调用

答案 2 :(得分:0)

尝试此代码....

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

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

用于检测super.onBackPressed()的默认后退。 因此,按下后退按钮后,当前活动将使用完成()完成。

答案 3 :(得分:0)

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