কম্পিউটার টিউটোরিয়াল

Kotlin-এ Android ListView-এ ফোকাসযোগ্য EditText তৈরির পদ্ধতি


এই উদাহরণটি দেখায় কিভাবে Kotlin ব্যবহার করে Android ListView-এ ফোকাসযোগ্য EditText তৈরি করা যায়।

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project নির্বাচন করে একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: activity_main.xml ডিজাইন করুন

res/layout/activity_main.xml ফাইলে নিচের কোডটি যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="4dp"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:descendantFocusability="beforeDescendants" />
</LinearLayout>

ধাপ ৩: MainActivity.kt-এ কাস্টম অ্যাডাপ্টার লিখুন

src/MainActivity.kt ফাইলে নিচের কোডটি যোগ করুন:

import androidx.appcompat.app.AppCompatActivity
import android.annotation.SuppressLint
import android.app.LauncherActivity
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.EditText
import android.widget.ListView
import java.util.ArrayList

class MainActivity : AppCompatActivity() {
    private lateinit var listView: ListView
    private lateinit var myAdapter: MyAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        listView = findViewById(R.id.listView)
        listView.itemsCanFocus = true
        myAdapter = MyAdapter()
        listView.adapter = myAdapter
    }

    private inner class MyAdapter internal constructor() : BaseAdapter() {
        private var layoutInflater: LayoutInflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        internal var myItems = ArrayList<LauncherActivity.ListItem>()
        lateinit var context: Context

        init {
            for (i in 0..6) {
                val listItem = LauncherActivity.ListItem()
                listItem.className = "Caption$i"
                myItems.add(listItem)
            }
            notifyDataSetChanged()
        }

        override fun getItem(position: Int): Any = position
        override fun getItemId(position: Int): Long = position.toLong()
        override fun getCount(): Int = myItems.size

        @SuppressLint("InflateParams")
        override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? {
            var convertView: View? = convertView
            val holder: ViewHolder
            if (convertView == null) {
                holder = ViewHolder()
                convertView = layoutInflater.inflate(R.layout.list, null)
                holder.caption = convertView.findViewById(R.id.ItemCaption)
                convertView.setTag(holder)
            } else {
                holder = convertView.tag as ViewHolder
            }
            holder.caption.setText(myItems.get(position).className)
            holder.caption.id = position
            holder.caption.onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus ->
                if (!hasFocus) {
                    val position = v.id
                    val caption = v as EditText
                    myItems[position].className = caption.text.toString()
                }
            }
            return convertView
        }
    }

    internal inner class ViewHolder {
        lateinit var caption: EditText
    }
}

ধাপ ৪: list.xml লেআউট তৈরি করুন

একটি Layout Resource ফাইল (list.xml) তৈরি করে নিচের কোডটি যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingStart="4dp">
    <EditText
        android:id="@+id/ItemCaption"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="2dip"
        android:singleLine="true" />
</LinearLayout>

ধাপ ৫: AndroidManifest.xml কনফিগার করুন

androidManifest.xml ফাইলে নিচের কোডটি যোগ করুন:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

অ্যাপ্লিকেশন রান করুন

ডিভাইস সংযুক্ত করে Android Studio থেকে Run করুন। ListView-এ প্রতিটি আইটেমে EditText ফোকাস পাবে।

  1. Kotlin ব্যবহার করে Android ListView-এ লং ক্লিক লিসেনার বাস্তবায়ন

  2. Kotlin ব্যবহার করে Android-এ স্ক্রলযোগ্য TextView তৈরি করা

  3. Kotlin ব্যবহার করে Android TextView-এ একাধিক স্টাইল প্রয়োগ করা

  4. অ্যান্ড্রয়েডে কোটলিন ব্যবহার করে Swipe Refresh Layout তৈরি করার উপায়