gpt4 book ai didi

android - singleTop 可搜索 Activity 在按下后退按钮时终止

转载 作者:行者123 更新时间:2023-11-30 04:04:09 25 4
gpt4 key购买 nike

我有一个 ListActivity 作为我应用程序的主要 Activity 。列表中的项目应该是可搜索的,但自然我不想一遍又一遍地开始相同的 Activity ,因此 singleTop。但是,我确实希望用户能够在搜索后返回到主列表,这给我带来了一些麻烦。目前,搜索后按返回将终止该应用程序。一种解决方案是专门制作列表 Activity 的副本来处理搜索,但我无法想象这是最好的方法。我曾短暂地尝试过 activity-alias 但我尝试过的每个排列要么不会改变行为,要么会执行 Web 搜索。我不知道 activity-alias 是否合适,但我还是提供了一个示例。

我的问题是,有没有最好的方法来实现我正在尝试做的事情而不涉及多余的代码维护?

<activity
android:name=".MainListActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias
android:name=".SearchList"
android:targetActivity=".MainListActivity"
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-alias>

最佳答案

我找到了一个非常简单的解决方案。

list :

<activity
android:name=".MainListActivity"
android:label="@string/app_name"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>

列表/搜索 Activity :

public class MainListActivity extends FragmentActivity
implements LoaderManager.LoaderCallbacks<Cursor>
{
private boolean searching = false;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_cheapest);
dbHelper = new DatabaseHelper(this);

String[] fromColumns = {"pname", "store", "unit_price"};
int[] toViews =
{R.id.entryProductName, R.id.entryStore, R.id.entryUnitPrice};
adapter = new SimpleCursorAdapter(this, R.layout.cheapest_row_entry,
null, fromColumns, toViews);

ListView lv = (ListView)findViewById(android.R.id.list);
lv.setAdapter(adapter);
lv.setEmptyView(findViewById(android.R.id.empty));
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> l, View v, int position,
long id) {
searching = false;
startActivity(new Intent(getBaseContext(),
EditProductActivity.class).putExtra("pid", ""+id));
}
});
handleIntent(getIntent());
}

@Override
public void onBackPressed() {
if (searching) {
searching = false;
getSupportLoaderManager().restartLoader(LOADER_MAIN, null, this);
} else {
finish();
}
}

@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}

private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
searching = true;
filter = intent.getStringExtra(SearchManager.QUERY);
getSupportLoaderManager().restartLoader(LOADER_SEARCH, null, this);
} else {
getSupportLoaderManager().initLoader(LOADER_MAIN, null, this);
}
}
...
}

但是,我确实首先让 activity-alias 工作了。我将它包含在后代中。

list :

<activity
android:name=".MainListActivity"
android:label="@string/app_name"
android:launchMode="singleTop" >
<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=".SearchListActivity" />
</activity>
<activity-alias
android:name=".SearchListActivity"
android:launchMode="singleTop"
android:targetActivity=".MainListActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable"
android:value=".SearchListActivity" />
</activity-alias>

列表/搜索 Activity :

public class MainListActivity extends FragmentActivity
implements LoaderManager.LoaderCallbacks<Cursor>
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view);
...
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> l, View v, int position,
long id) {
if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) {
finish();
}
startActivity(new Intent(getBaseContext(),
EditProductActivity.class).putExtra("pid", ""+id));
}
});
handleIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}

private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
filter = intent.getStringExtra(SearchManager.QUERY);
getSupportLoaderManager().restartLoader(LOADER_SEARCH, null, this);
} else {
getSupportLoaderManager().initLoader(LOADER_MAIN, null, this);
}
}
...
}

关于android - singleTop 可搜索 Activity 在按下后退按钮时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com