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