วิธีเปลี่ยนข้อความ SearchView ของ Android


92

มีวิธี setText () สำหรับ SearchView หรืออะไรทำนองนั้นหรือไม่? ฉันพยายามตั้งค่าข้อความค้นหาใน searchView แบบนี้ แต่ไม่มีวิธีการเช่นนี้

searchView.setText(searchToken);

คำตอบ:


166

หลังจากสงสัยและลองใช้ฉันพบว่ามีวิธีการใน API ชื่อ setQuery () ซึ่งคุณตั้งค่าข้อความ SearchView และคุณอาจเลือกที่จะส่งการค้นหาหรือไม่ใช้พารามิเตอร์บูลีน

searchView.setQuery(searchToken, false);

3
แม้ว่าจะตั้งค่าพารามิเตอร์บูลีนเป็นเท็จแล้วก็ยังคงค้นหาอีกครั้งคำแนะนำใด ๆ จะช่วย
Raj Trivedi

ฉันได้ทำสิ่งนี้แล้ว แต่การตั้งค่าพารามิเตอร์ที่ 2 เพื่อtrueให้การสืบค้นดำเนินการเช่นกัน แต่โปรดทราบว่าแม้ว่าการสืบค้นจะดำเนินการได้ดี แต่กล่องข้อความจะยังคงว่างเปล่าจนกว่าจะได้รับโฟกัสด้วยตนเอง ฉันจะแน่ใจได้อย่างไรว่าค่าที่ตั้งอัตโนมัติจะแสดงโดยอัตโนมัติด้วย
nemesisfixx

1
ไม่เป็นไร. อาร์กิวเมนต์ที่สองคือ "submit"
roghayeh hosseini

36

คุณสามารถใช้setQuery()เพื่อเปลี่ยนข้อความในกล่องข้อความ

อย่างไรก็ตามsetQuery()วิธีการทริกเกอร์สถานะโฟกัสของมุมมองการค้นหาดังนั้นแป้นพิมพ์จะแสดงบนหน้าจอหลังจากเรียกใช้วิธีนี้แล้ว

เพื่อแก้ไขปัญหานี้เพียงโทรsearchView.clearFocus()หลังจากที่setQuery()วิธีการในการ unfocus มันและแป้นพิมพ์จะไม่แสดงบนหน้าจอ

ตัวอย่าง:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();

ไม่แสดงเนื่องจากเขียน searchView.setIconified (false); แสดง.
lolo_house

8

นี่คือสิ่งที่ได้ผลสำหรับฉัน

    MenuItem sItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) sItem.getActionView();

    sItem.expandActionView();
    searchView.setQuery("your text", false);

1
วิธีการช่วยชีวิตที่ง่ายและรวดเร็ว!
Eren

7

หากคุณต้องการกรอกSearchViewข้อความล่วงหน้าของคุณด้วยข้อความบางส่วนsearchView.setQuery(text, false)จะไม่สามารถใช้งานได้นอกกรอบ เหตุผลก็คือเมื่อSearchViewได้รับการขยาย

searchView.onActionViewExpanded()

รับสายที่โทรsearchView.setText("")และล้างข้อความที่เราตั้งไว้

วิธีแก้ไขคือการตั้งค่า Expand listener และตั้งค่า pre-fil text เมื่อSearchViewขยายแล้ว

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.main, menu)
    val searchView = menu.findItem(R.id.action_search).actionView as SearchView
    menu.findItem(R.id.action_search).setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
            // it is important to call this before we set our own query text.
            searchView.onActionViewExpanded()
            searchView.setQuery("Prefil Text", false)
            return true
        }

        override fun onMenuItemActionCollapse(item: MenuItem?) = true
    })
    return true
}

คำตอบที่ดี แต่ระวังของ searchView.onActionViewExpanded ()และsearchView.setQuery () ทั้งเรียกonQueryTextChange ()ถ้าคุณได้ใช้งานsearchView.setOnQueryTextListener ทริกเกอร์แรกอาจว่างสตริงที่จะจ่ายให้กับทริกเกอร์ที่สองได้เป็นอย่างดี
Bad Loser

0

หากคุณต้องการให้ SearchView ขยายและสามารถย่อขนาดกลับไปที่ไอคอนหลังจากที่ผู้ใช้แตะ x (ปิด) วิธีคือ:

searchView.isIconified = false // Expand it
searchView.setQuery("your text here", false) // true if you want to submit, otherwise false
searchView.clearFocus() // so the keyboard is not show up.

หมายเหตุ: หากคุณขยายโดยใช้:

searchView.onActionViewExpanded()

searchView จะไม่หดกลับหลังจากผู้ใช้แตะ x (ปิด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.