इस गाइड में, Jetpack Compose में टेक्स्ट इनपुट के आधार पर स्ट्रिंग की सूची को फ़िल्टर करने का तरीका बताया गया है. उपयोगकर्ता की खोज क्वेरी के आधार पर, सूची को डाइनैमिक तौर पर अपडेट करने के लिए, इस तरीके का इस्तेमाल करें.
वर्शन के साथ काम करना
यह सुविधा, Compose के 1.2.0 और इसके बाद के वर्शन पर काम करती है.
डिपेंडेंसी
अपने build.gradle
में ये डिपेंडेंसी शामिल करें:
टेक्स्ट इनपुट के आधार पर सूची को फ़िल्टर करना
नीचे दिए गए स्निपेट, एक साथ मिलकर एक सूची बनाते हैं. यह सूची, उपयोगकर्ता टाइप के हिसाब से रीयल टाइम में अपडेट होती रहती है. इस उदाहरण में, सूची के डेटा और फ़िल्टर करने के लॉजिक को सेव करने के लिए ViewModel
का इस्तेमाल किया गया है. वहीं, FilterTextView()
फ़ंक्शन ऐसा यूज़र इंटरफ़ेस बनाता है जो फ़िल्टर टेक्स्ट में बदलाव होने पर अपने-आप अपडेट हो जाता है.
class FilterTextViewModel : ViewModel() { private val items = listOf( "Cupcake", "Donut", "Eclair", "Froyo", "Gingerbread", "Honeycomb", "Ice Cream Sandwich" ) private val _filteredItems = MutableStateFlow(items) var filteredItems: StateFlow<List<String>> = _filteredItems fun filterText(input: String) { // This filter returns the full items list when input is an empty string. _filteredItems.value = items.filter { it.contains(input, ignoreCase = true) } } }
कोड के बारे में अहम जानकारी
ViewModel
कोड, फ़िल्टर करने की प्रोसेस को कॉम्पोज़ेबल से अलग करता है.ViewModel
में ओरिजनल और फ़िल्टर की गई सूचियां, दोनों शामिल होती हैं. यह आइटम की सूची और फ़िल्टर किए गए आइटम को होल्ड करने के लिएMutableStateFlow
तय करता है.filterText
फ़ंक्शन, दी गई इनपुट स्ट्रिंग के आधार पर सूची को फ़िल्टर करता है औरfilteredItems
स्टेटस को अपडेट करता है. यह स्टेटस, यूज़र इंटरफ़ेस (यूआई) में वापस भेज दिया जाता है.
@Composable fun FilterTextView(modifier: Modifier = Modifier, viewModel: FilterTextViewModel = viewModel()) { val filteredItems by viewModel.filteredItems.collectAsStateWithLifecycle() var text by rememberSaveable { mutableStateOf("") } Column( modifier = Modifier .fillMaxSize() .padding(all = 10.dp) ) { OutlinedTextField( value = text, onValueChange = { text = it viewModel.filterText(text) }, label = { Text("Filter Text") }, modifier = Modifier.fillMaxWidth() ) LazyColumn { items( count = filteredItems.size, key = { index -> filteredItems[index] } ) { ListItem( headlineContent = { Text(filteredItems[it]) }, modifier = Modifier .fillParentMaxWidth() .padding(10.dp) ) } } } }
कोड के बारे में अहम जानकारी
- उपयोगकर्ता के इनपुट के लिए
OutlinedTextField
और फ़िल्टर की गई सूची के आइटम दिखाने के लिएLazyColumn
दिखाता है. ViewModel
सेfilteredItems
स्टेटस फ़्लो इकट्ठा करता है और उसे लाइफ़साइकल के बारे में जानकारी देने वालेState
ऑब्जेक्ट में बदल देता है.collectAsStateWithLifecycle
,StateFlow
से नई वैल्यू इकट्ठा करता है और वैल्यू बदलने पर यूज़र इंटरफ़ेस (यूआई) को फिर से बनाता है.
- फ़िल्टर टेक्स्ट फ़ील्ड में डाले गए मौजूदा टेक्स्ट को सेव करने के लिए,
text by rememberSaveable { mutableStateOf("") }
एक स्टेट वैरिएबलtext
बनाता है.rememberSaveable
, कॉन्फ़िगरेशन में होने वाले बदलावों के बावजूद टेक्स्ट की वैल्यू को बनाए रखता है.by
कीवर्ड, टेक्स्ट की वैल्यू कोMutableState
ऑब्जेक्ट की वैल्यू प्रॉपर्टी को सौंपता है.
- जब टेक्स्ट में बदलाव होने पर
onValueChange
कॉलबैक ट्रिगर होता है, तोOutlinedTextField
व्यू मॉडल सेfilterText
फ़ंक्शन को कॉल करता है.
नतीजा
ऐसे संग्रह जिनमें यह गाइड शामिल है
यह गाइड, चुने गए क्विक गाइड के कलेक्शन का हिस्सा है. इसमें Android डेवलपमेंट के बड़े लक्ष्यों के बारे में बताया गया है:
