इस गाइड में, 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 डेवलपमेंट के बड़े लक्ष्यों के बारे में बताया गया है: