Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在第二个活动中返回搜索结果_Android_Android Studio_Kotlin - Fatal编程技术网

Android 在第二个活动中返回搜索结果

Android 在第二个活动中返回搜索结果,android,android-studio,kotlin,Android,Android Studio,Kotlin,我正在努力搜索第二个活动。 当我单击MainActivity时,会启动第二个活动,该活动应允许执行搜索,然后将结果返回到MainActivity 我正在努力让搜索结果正常工作,因此,我非常感谢您的帮助: 1,当我键入我正在搜索的文本时,它区分大小写。例如,在数组中有一个项目:“苹果”,如果我搜索文本“苹果”,土司会说它没有找到任何东西,但当我尝试搜索“苹果”时,土司会说“找到一个苹果”。那么,有没有一种简单的方法使这个案例不区分大小写 2、当我点击列表中要搜索的项目时,如何关闭第二个活动并返回到

我正在努力搜索第二个活动。 当我单击MainActivity时,会启动第二个活动,该活动应允许执行搜索,然后将结果返回到MainActivity

我正在努力让搜索结果正常工作,因此,我非常感谢您的帮助:

1,当我键入我正在搜索的文本时,它区分大小写。例如,在数组中有一个项目:“苹果”,如果我搜索文本“苹果”,土司会说它没有找到任何东西,但当我尝试搜索“苹果”时,土司会说“找到一个苹果”。那么,有没有一种简单的方法使这个案例不区分大小写

2、当我点击列表中要搜索的项目时,如何关闭第二个活动并返回到主活动,并返回所选项目

非常感谢

MainActivity.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)
}
活动\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很高兴我能帮上忙。如果这有助于你结束问题并接受答案,如果你愿意的话。谢谢。