জেটপ্যাক কম্পোজে টেক্সট ইনপুটের উপর ভিত্তি করে স্ট্রিংগুলির একটি তালিকার মাধ্যমে কীভাবে ফিল্টার করা যায় এই নির্দেশিকাটি ব্যাখ্যা করে। ব্যবহারকারী অনুসন্ধান প্রশ্নের উপর ভিত্তি করে গতিশীলভাবে একটি তালিকা আপডেট করতে এই পদ্ধতি ব্যবহার করুন।
সংস্করণ সামঞ্জস্য
এই বাস্তবায়ন কম্পোজ সংস্করণ 1.2.0 এবং উচ্চতর সাথে কাজ করে।
নির্ভরতা
আপনার build.gradle
এ নিম্নলিখিত নির্ভরতা অন্তর্ভুক্ত করুন:
পাঠ্য ইনপুটের উপর ভিত্তি করে একটি তালিকা ফিল্টার করুন
একসাথে, নিম্নলিখিত স্নিপেটগুলি একটি তালিকা তৈরি করে যা ব্যবহারকারীর ধরন হিসাবে বাস্তব সময়ে আপডেট হয়। এই উদাহরণটি তালিকা ডেটা এবং ফিল্টারিং লজিক ধরে রাখতে একটি ViewModel
ব্যবহার করে, যখন FilterTextView()
ফাংশনটি UI তৈরি করে যা ফিল্টার পাঠ্য পরিবর্তিত হলে স্বয়ংক্রিয়ভাবে আপডেট হয়।
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
অবস্থা আপডেট করে, যা UI-তে ফেরত পাঠানো হয়।
@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
থেকে সর্বশেষ মান সংগ্রহ করে এবং মান পরিবর্তন হলে UI পুনরায় সংকলন করে।
-
-
text by rememberSaveable { mutableStateOf("") }
ফিল্টার পাঠ্য ক্ষেত্রে প্রবেশ করা বর্তমান পাঠ্যটিকে ধরে রাখতে একটি রাষ্ট্র পরিবর্তনশীলtext
তৈরি করে।-
rememberSaveable
কনফিগারেশন পরিবর্তন জুড়ে পাঠ্যের মান সংরক্ষণ করে। -
by
কীওয়ার্ড টেক্সটের মানকেMutableState
অবজেক্টের মান সম্পত্তিতে অর্পণ করে।
-
-
OutlinedTextField
ভিউ মডেল থেকেfilterText
ফাংশনকে কল করে যখন টেক্সট পরিবর্তনগুলিonValueChange
কলব্যাককে ট্রিগার করে।
ফলাফল
এই নির্দেশিকা ধারণকারী সংগ্রহ
এই নির্দেশিকাটি এই কিউরেট করা কুইক গাইড সংগ্রহের অংশ যা বৃহত্তর অ্যান্ড্রয়েড উন্নয়ন লক্ষ্যগুলি কভার করে:
