Android 在第二个活动中返回搜索结果
我正在努力搜索第二个活动。 当我单击MainActivity时,会启动第二个活动,该活动应允许执行搜索,然后将结果返回到MainActivity 我正在努力让搜索结果正常工作,因此,我非常感谢您的帮助: 1,当我键入我正在搜索的文本时,它区分大小写。例如,在数组中有一个项目:“苹果”,如果我搜索文本“苹果”,土司会说它没有找到任何东西,但当我尝试搜索“苹果”时,土司会说“找到一个苹果”。那么,有没有一种简单的方法使这个案例不区分大小写 2、当我点击列表中要搜索的项目时,如何关闭第二个活动并返回到主活动,并返回所选项目 非常感谢 MainActivity.ktAndroid 在第二个活动中返回搜索结果,android,android-studio,kotlin,Android,Android Studio,Kotlin,我正在努力搜索第二个活动。 当我单击MainActivity时,会启动第二个活动,该活动应允许执行搜索,然后将结果返回到MainActivity 我正在努力让搜索结果正常工作,因此,我非常感谢您的帮助: 1,当我键入我正在搜索的文本时,它区分大小写。例如,在数组中有一个项目:“苹果”,如果我搜索文本“苹果”,土司会说它没有找到任何东西,但当我尝试搜索“苹果”时,土司会说“找到一个苹果”。那么,有没有一种简单的方法使这个案例不区分大小写 2、当我点击列表中要搜索的项目时,如何关闭第二个活动并返回到
class MainActivity : AppCompatActivity() {
private val SEARCH_ACTIVITY_REQUEST_CODE = 1
/* THE GUTS OF IT */
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Searchbutton.setOnClickListener {
val intent = Intent(this, SearchActivity::class.java)
)
startActivityForResult(intent, SEARCH_ACTIVITY_REQUEST_CODE)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Log.d( "TAG","MainActivity 30 - MY_DEBUG" )
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SEARCH_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
val gotthisInt = data?.getIntExtra("MY_KEY", 1) ?: 1
Log.d("TAG", "What was received MY_DEBUG= $gotthisInt")
}
}
}
class SearchActivity : AppCompatActivity() {
private lateinit var toolbar: Toolbar
lateinit var adapter: ArrayAdapter<*>
private lateinit var listView: ListView
private lateinit var emptyView: TextView
lateinit var list: ArrayList<String>
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("TAG", "OnCreate Starts 101 MY_DEBUG")
super.onCreate(savedInstanceState)
setContentView(R.layout.search_main)
title = "KotlinApp"
toolbar = findViewById(R.id.toolbar)
listView = findViewById(R.id.listView)
emptyView = findViewById(R.id.emptyView)
adapter = ArrayAdapter<Any?>(this, android.R.layout.simple_list_item_1,
resources.getStringArray(R.array.vegetables))
listView.adapter = adapter
listView.emptyView = emptyView
Log.d("TAG", "OnCreate Starts 199 MY_DEBUG")
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
Log.d("TAG", "onCreateOptionsMenu - 301 - Gets here MY_DEBUG")
menuInflater.inflate(R.menu.nav_menu,menu)
val search : MenuItem? = menu?.findItem(R.id.appSearchBar)
val searchView : SearchView = search?.actionView as SearchView
searchView.queryHint = "Search Country..!"
title = "KotlinApp"
listView = findViewById(R.id.listView)
list = ArrayList()
list.add("Apple")
list.add("Banana")
list.add("Pineapple")
list.add("Orange")
list.add("Mango")
list.add("Grapes")
list.add("Lemon")
list.add("Melon")
list.add("Watermelon")
list.add("Papaya")
adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)
listView.adapter = adapter
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
if (list.contains(query)) {
adapter.filter.filter(query)
Toast.makeText( this@SearchActivity, "Found one $query",Toast.LENGTH_LONG ).show()
} else {
Toast.makeText(this@SearchActivity, "No Match found", Toast.LENGTH_LONG).show()
}
return false
}
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return false
}
})
Log.d("TAG", "onCreateOptionsMenu - 320 - Gets here MY_DEBUG")
return super.onCreateOptionsMenu(menu)
}
活动\u main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- Debug - to be deleted -->
<TextView
android:id="@+id/textDebug"
android:layout_width="69dp"
android:layout_height="40dp"
android:layout_marginBottom="104dp"
android:text="DEBUG IT"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/Searchbutton"
android:layout_width="58dp"
android:layout_height="50dp"
android:layout_marginBottom="80dp"
android:drawableLeft="@android:drawable/ic_menu_search"
app:layout_constraintBottom_toTopOf="@+id/textDebug"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorBackgroundFloating"
android:minHeight="?attr/actionBarSize" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/emptyView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No Results"
android:textSize="20sp"
android:visibility="gone" />
SearchActivity.kt
class MainActivity : AppCompatActivity() {
private val SEARCH_ACTIVITY_REQUEST_CODE = 1
/* THE GUTS OF IT */
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Searchbutton.setOnClickListener {
val intent = Intent(this, SearchActivity::class.java)
)
startActivityForResult(intent, SEARCH_ACTIVITY_REQUEST_CODE)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
Log.d( "TAG","MainActivity 30 - MY_DEBUG" )
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SEARCH_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
val gotthisInt = data?.getIntExtra("MY_KEY", 1) ?: 1
Log.d("TAG", "What was received MY_DEBUG= $gotthisInt")
}
}
}
class SearchActivity : AppCompatActivity() {
private lateinit var toolbar: Toolbar
lateinit var adapter: ArrayAdapter<*>
private lateinit var listView: ListView
private lateinit var emptyView: TextView
lateinit var list: ArrayList<String>
override fun onCreate(savedInstanceState: Bundle?) {
Log.d("TAG", "OnCreate Starts 101 MY_DEBUG")
super.onCreate(savedInstanceState)
setContentView(R.layout.search_main)
title = "KotlinApp"
toolbar = findViewById(R.id.toolbar)
listView = findViewById(R.id.listView)
emptyView = findViewById(R.id.emptyView)
adapter = ArrayAdapter<Any?>(this, android.R.layout.simple_list_item_1,
resources.getStringArray(R.array.vegetables))
listView.adapter = adapter
listView.emptyView = emptyView
Log.d("TAG", "OnCreate Starts 199 MY_DEBUG")
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
Log.d("TAG", "onCreateOptionsMenu - 301 - Gets here MY_DEBUG")
menuInflater.inflate(R.menu.nav_menu,menu)
val search : MenuItem? = menu?.findItem(R.id.appSearchBar)
val searchView : SearchView = search?.actionView as SearchView
searchView.queryHint = "Search Country..!"
title = "KotlinApp"
listView = findViewById(R.id.listView)
list = ArrayList()
list.add("Apple")
list.add("Banana")
list.add("Pineapple")
list.add("Orange")
list.add("Mango")
list.add("Grapes")
list.add("Lemon")
list.add("Melon")
list.add("Watermelon")
list.add("Papaya")
adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list)
listView.adapter = adapter
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
if (list.contains(query)) {
adapter.filter.filter(query)
Toast.makeText( this@SearchActivity, "Found one $query",Toast.LENGTH_LONG ).show()
} else {
Toast.makeText(this@SearchActivity, "No Match found", Toast.LENGTH_LONG).show()
}
return false
}
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return false
}
})
Log.d("TAG", "onCreateOptionsMenu - 320 - Gets here MY_DEBUG")
return super.onCreateOptionsMenu(menu)
}
class SearchActivity:AppCompatActivity(){
私有lateinit变量工具栏:工具栏
lateinit变量适配器:ArrayAdapter
私有lateinit变量listView:listView
私有lateinit变量emptyView:TextView
lateinit变量列表:ArrayList
重写创建时的乐趣(savedInstanceState:Bundle?){
Log.d(“标记”,“OnCreate启动101 MY_调试”)
super.onCreate(savedInstanceState)
setContentView(R.layout.search_main)
title=“KotlinApp”
toolbar=findviewbyd(R.id.toolbar)
listView=findViewById(R.id.listView)
emptyView=findViewById(R.id.emptyView)
adapter=ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,
resources.getStringArray(R.array.vegets))
listView.adapter=适配器
listView.emptyView=emptyView
Log.d(“标记”,“OnCreate启动199 MY_调试”)
}
重写创建选项菜单(菜单:菜单):布尔值{
d(“标记”,“onCreateOptions菜单-301-获取我的调试”)
菜单平坦。充气(右菜单。导航菜单,菜单)
val搜索:菜单项?=菜单项?.findItem(R.id.appSearchBar)
val searchView:searchView=search?.actionView作为searchView
searchView.queryHint=“搜索国家..!”
title=“KotlinApp”
listView=findViewById(R.id.listView)
list=ArrayList()
列表。添加(“苹果”)
列表。添加(“香蕉”)
列表。添加(“菠萝”)
列表。添加(“橙色”)
列表。添加(“芒果”)
列表。添加(“葡萄”)
列表。添加(“柠檬”)
列表。添加(“甜瓜”)
列表。添加(“西瓜”)
添加(“木瓜”)
adapter=ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,list)
listView.adapter=适配器
searchView.setOnQueryTextListener(对象:searchView.OnQueryTextListener{
重写onQueryTextSubmit(查询:字符串):布尔值{
if(list.contains(查询)){
adapter.filter.filter(查询)
Toast.makeText(this@SearchActivity,“找到一个$query”,Toast.LENGTH\u LONG.show()
}否则{
Toast.makeText(this@SearchActivity,“未找到匹配项”,Toast.LENGTH\u LONG.show()
}
返回错误
}
重写onQueryTextChange(newText:String):布尔值{
适配器.filter.filter(新文本)
返回错误
}
})
d(“标记”,“onCreateOptions菜单-320-获取我的调试”)
返回super.onCreateOptions菜单(菜单)
}
search\u main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- Debug - to be deleted -->
<TextView
android:id="@+id/textDebug"
android:layout_width="69dp"
android:layout_height="40dp"
android:layout_marginBottom="104dp"
android:text="DEBUG IT"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/Searchbutton"
android:layout_width="58dp"
android:layout_height="50dp"
android:layout_marginBottom="80dp"
android:drawableLeft="@android:drawable/ic_menu_search"
app:layout_constraintBottom_toTopOf="@+id/textDebug"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SearchActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorBackgroundFloating"
android:minHeight="?attr/actionBarSize" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/emptyView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="No Results"
android:textSize="20sp"
android:visibility="gone" />
在
setOnQueryTextListener
块中,使用此选项而不是query
:
list.contains(query.capitalize(Locale.ROOT))
或者,如果您的项目始终使用特定语言:
list.contains(query.capitalize(Locale.ENGLISH))
要回答第二个问题,您可以将结果作为额外的附加到意图,并将其发送到MainActivity
1,当我键入我正在搜索的文本时,它是大小写
敏感。例如,在数组中有一个项目:“苹果”,如果我搜索的话
对于文本“苹果”,吐司说它没有找到任何东西,但是什么时候
我试着搜索“苹果”,吐司上写着“找到一个苹果”。苹果也是
有没有一个简单的方法,使案件不区分大小写,请
您可以做的是在使用方法与字符串进行比较时
string_item.toLowerCase()
这将把你所有的字母转换成小写
String item1 = "Apple";
String item2 = "apple";
if (item1.toLowerCase().contentEquals(item2.toLowerCase()) {
do something
}
2、当我点击列表中要搜索的项目时,如何关闭第二个活动并返回到主活动,并返回所选项目
对于这个问题,你可以这样做
int SEARCH_ACTIVITY_REQUEST_CODE = 1
Intent i = new Intent(this, SearchActivity.class);
startActivityForResult(i, SEARCH_ACTIVITY_REQUEST_CODE);
然后在SearchActivity中,如果要将数据发送回MainActivity:
Intent intent = new Intent();
intent .putExtra("result", result);
setResult(Activity.RESULT_OK, intent );
finish();
或者,如果您不想将数据发送回:
Intent intent = new Intent();
setResult(Activity.RESULT_CANCELED, intent);
finish();
只要把它放在里面就行了
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent();
intent .putExtra("result", result);
setResult(Activity.RESULT_OK, intent );
finish();
}
});
我用java写了这篇文章,但你也可以用Kotlin来写。既然你使用Kotlin,你可以查看这篇文章非常感谢…我越来越近了!我已经完成了第一个挑战(区分大小写),但是(单击列表并返回选择)–但是我在点击返回主活动时遇到了困难。“list.setonimclickleenner(new AdapterView.onimclickleenner()…”部分。我尝试将其放在onCreateOptions菜单部分–我不确定这是否正确?我假设这是Java而不是Kotlin?它说“setonimclickleenner”是的,我的代码是用Java编写的,是的。很抱歉,但我对Kotlin还不是很在行。你可以把它放在你想要的地方。你在OnCreateOptions菜单中有listView,所以只需在那里复制listView。setOnItemClickListener(…)然后写上面的代码。我的意思是你需要用Kotlin写这个。太棒了!现在明白了!Cheers@Winny很高兴我能帮上忙。如果这有助于你结束问题并接受答案,如果你愿意的话。谢谢。