টাইপ করার সময় একটি তালিকা ফিল্টার করুন

জেটপ্যাক কম্পোজে টেক্সট ইনপুটের উপর ভিত্তি করে স্ট্রিংগুলির একটি তালিকার মাধ্যমে কীভাবে ফিল্টার করা যায় এই নির্দেশিকাটি ব্যাখ্যা করে। ব্যবহারকারী অনুসন্ধান প্রশ্নের উপর ভিত্তি করে গতিশীলভাবে একটি তালিকা আপডেট করতে এই পদ্ধতি ব্যবহার করুন।

সংস্করণ সামঞ্জস্য

এই বাস্তবায়ন কম্পোজ সংস্করণ 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 কলব্যাককে ট্রিগার করে।

ফলাফল

চিত্র 1. একটি ফিল্টার করা তালিকা যা নতুন পাঠ্য প্রবেশ করানো হলে আপডেট হয়।

এই নির্দেশিকা ধারণকারী সংগ্রহ

এই নির্দেশিকাটি এই কিউরেট করা কুইক গাইড সংগ্রহের অংশ যা বৃহত্তর অ্যান্ড্রয়েড উন্নয়ন লক্ষ্যগুলি কভার করে:

টেক্সট এন্ট্রি করে এবং ইনপুটের অন্যান্য উপায় ব্যবহার করে ব্যবহারকারীদের আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করার উপায়গুলি কীভাবে বাস্তবায়ন করবেন তা শিখুন।

প্রশ্ন বা প্রতিক্রিয়া আছে

আমাদের প্রায়শই জিজ্ঞাসিত প্রশ্ন পৃষ্ঠায় যান এবং দ্রুত গাইড সম্পর্কে জানুন বা যোগাযোগ করুন এবং আপনার চিন্তাভাবনা আমাদের জানান।