如何使用Android搜索查看无singleTop?(How to use an Android S

2019-07-19 16:33发布

我有,我通常要在多个任务存在,使[返回]按钮,即可恢复以前的状态的活动; 不过,我也想用一个搜索查看与现有的活动,不推新到任务堆栈(因为我要搜索什么是当前显示的)。 这里是我的问题:

  • 如果我设置了活动的启动模式为“singleTop”,则搜索查看工作与当前的活动,但Context.startActivity不增加新的活动堆栈。
  • 如果我设置了活动的启动模式为“标准”,startActivity增加了新的活动,以堆栈,但搜索查看也创造而不是搜索现有的一个新的(空)的活动。

我找不到任何办法使搜索查看使用意图的标志(如FLAG_ACTIVITY_SINGLE_TOP我试着去周围的其他方式,设置启动模式为“singleTop”,然后添加。 FLAG_ACTIVITY_NEW_TASK每一个意图,但只有从不同的活动课开展的工作时;当我尝试从自己的类发起活动的新实例,Android的不尊重FLAG_ACTIVITY_NEW_TASK并没有推新的任务压入堆栈。

也许有什么东西我可以做Activity.onNewIntent迫使活动克隆自己,然后。

我在对搜索查看放弃,只是写我自己的自定义插件的边缘,尽管这个“Android 3.0中开始,使用搜索查看小部件操作栏中的产品提供的搜索结果在您的应用程序的首选方式“( 来源 ) -到目前为止,这似乎只是太过死板,不可配置的是在不平凡的情况下非常有用。

有没有人找到了解决这个问题呢?

Answer 1:

很多反思和错误的开始后,我意识到,搜索查看只是该任务的错误的事情。 谷歌设计与搜索查看一个非常具体的类型记住搜索活动:

  • 用户键入搜索查询。
  • 该应用程序推出结果列表的新的活动。

这不是我所用的搜索模式; 相反,我想目前细化使用查询在屏幕上显示一个列表 - 它更是一个过滤的搜索比同步查询和响应模型。 搜索查看是不是专为这一点,所以我继续写我自己的小工具(和其绑定到搜索菜单项和搜索按钮)。

我很惊讶,没有人在这个问题上有任何意见 - 通常是Android的问题产生了很多的讨论。 我想,这是只是太远了那里。



Answer 2:

我有同样的问题作为OP,但并不意味着使用放弃的解决方案SearchView 。 这不是完美的解决方案,但它是相当干净,似乎运作良好。

作为OP说...

当我尝试从自己的类发起活动的新实例,Android的不尊重FLAG_ACTIVITY_NEW_TASK并没有推新的任务压入堆栈

...所以我的解决办法是通过中介活动中去。 对于这一点,我创建了一个DummyActivity类基本上采用的原意并转发到你的目的地的活动。

因此,而不是,从我原来的活动,号召...

Intent destinationIntent = new Intent(getActivity(), DestinationActivity.class);
startActivity(destinationIntent);

...我打电话...

/*
 * Create the intent as normal, but replace our destination Activity with DummyActivity
 */
Intent dummyIntent = new Intent(getActivity(), DummyActivity.class);

/*
 * This will make it so that if user clicks back from the next activity, they won't be shown DummyActivity
 */
dummyIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

/*
 * Tell DummyActivity about the destination Activity
 */
dummyIntent.putExtra(DummyActivity.EXTRA_DESTINATION_ACTIVITY, YourDestinationActivity.class); //IMPORTANT - the destination Activity must implement Serializable

/*
 * If you want, you can add any other extras to dummyIntent (which will be passed through to the destination activity). Launch DummyActivity.
 */
startActivity(dummyIntent);

在我的清单,DesinationActivity被定义为singleTop。

而如果你需要的唯一的另一件事是不应该需要任何重大的定制DummyActivity类...

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class DummyActivity extends Activity {

    public static final String EXTRA_DESTINATION_ACTIVITY = "uk.co.mobilewebexpert.EXTRA_DESTINATION_ACTIVITY";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_dummy);

        Intent intent = getIntent();

        /*
         * Get destination activity info
         */
        @SuppressWarnings("unchecked")
        Class<Activity> destinationActivity = (Class<Activity>) intent.getSerializableExtra(EXTRA_DESTINATION_ACTIVITY);
        Bundle destinationActivityExtras = intent.getExtras();

        /*
         * Launch destination activity
         */
        Intent destinationActivityIntent = new Intent(this, destinationActivity);
        destinationActivityIntent.putExtras(destinationActivityExtras);
        destinationActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(destinationActivityIntent);
    }

    /**
     * Override super.onNewIntent() so that calls to getIntent() will return the latest
     * intent, rather than the first intent.
     */
    @Override
    public void onNewIntent(Intent intent){
        super.onNewIntent(intent);
        setIntent(intent);
    }

}

希望这会为你工作了。 建议欢迎。 干杯。



文章来源: How to use an Android SearchView without singleTop?