Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में स्पिनर का चयनित आइटम मान द्वारा कैसे सेट करें

Spinner में पोजिशन के बजाय मान (वैल्यू) के आधार पर चयन सेट करना

डिफ़ॉल्ट रूप से spinner.setSelection(position) इंडेक्स का उपयोग करता है। लेकिन अक्सर हमें किसी विशिष्ट मान (जैसे "क्रिस्टियानो रोनाल्डो") के आधार पर चयन सेट करना होता है। यह उदाहरण मान-आधारित चयन के तरीके दिखाता है।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में प्रोजेक्ट बनाएं।

चरण 2: लेआउट फ़ाइल

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:text="फुटबॉल खिलाड़ी चुनें:"
        android:textSize="18sp"
        android:textStyle="bold" />

    <Spinner
        android:id="@+id/spinnerPlayers"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView" />

    <Button
        android:id="@+id/btnSelectByValue"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/spinnerPlayers"
        android:layout_marginTop="16dp"
        android:onClick="selectByValue"
        android:text="मान द्वारा चुनें: क्रिस्टियानो रोनाल्डो" />

    <Button
        android:id="@+id/btnSelectByIndex"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnSelectByValue"
        android:layout_marginTop="8dp"
        android:onClick="selectByIndex"
        android:text="इंडेक्स द्वारा चुनें: 0 (मेस्सी)" />

    <TextView
        android:id="@+id/tvSelected"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnSelectByIndex"
        android:layout_marginTop="16dp"
        android:gravity="center"
        android:textSize="16sp"
        android:textStyle="bold" />

</RelativeLayout>

चरण 3: MainActivity में स्पिनर सेटअप और चयन लॉजिक

package com.app.sample;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private Spinner spinnerPlayers;
    private TextView tvSelected;
    private List playersList;
    private ArrayAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinnerPlayers = findViewById(R.id.spinnerPlayers);
        tvSelected = findViewById(R.id.tvSelected);

        // डेटा स्रोत
        String[] playersArray = {
            "लियोनेल मेस्सी", "ईडन हैज़र्ड", "क्रिस्टियानो रोनाल्डो",
            "नेमार जूनियर", "गैरेथ बेल", "डेविड बेकहम"
        };
        playersList = new ArrayList<>(Arrays.asList(playersArray));

        // एडाप्टर बनाएं
        adapter = new ArrayAdapter<>(this,
                android.R.layout.simple_spinner_item, playersList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerPlayers.setAdapter(adapter);

        // चयन परिवर्तन लिस्टनर
        spinnerPlayers.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                String selected = playersList.get(position);
                tvSelected.setText("चयनित: " + selected + " (इंडेक्स: " + position + ")");
            }

            @Override
            public void onNothingSelected(AdapterView parent) {
                tvSelected.setText("कोई चयन नहीं");
            }
        });
    }

    // विधि 1: मान द्वारा चयन सेट करें (मुख्य समाधान)
    public void selectByValue(View view) {
        String targetValue = "क्रिस्टियानो रोनाल्डो";
        int position = findPositionByValue(targetValue);

        if (position >= 0) {
            spinnerPlayers.setSelection(position);
            Toast.makeText(this, "चयनित: " + targetValue + " (पोजिशन " + position + ")", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "मान नहीं मिला: " + targetValue, Toast.LENGTH_SHORT).show();
        }
    }

    // मान के आधार पर पोजिशन खोजने का हेल्पर मेथड
    private int findPositionByValue(String value) {
        for (int i = 0; i < playersList.size(); i++) {
            if (playersList.get(i).equals(value)) {
                return i;
            }
        }
        return -1; // नहीं मिला
    }

    // विधि 2: इंडेक्स द्वारा (तुलना के लिए)
    public void selectByIndex(View view) {
        spinnerPlayers.setSelection(0); // मेस्सी
    }

    // एडवांस्ड: केस-इनसेंसिटिव खोज
    private int findPositionByValueIgnoreCase(String value) {
        for (int i = 0; i < playersList.size(); i++) {
            if (playersList.get(i).equalsIgnoreCase(value)) {
                return i;
            }
        }
        return -1;
    }

    // एडवांस्ड: ऑब्जेक्ट लिस्ट के लिए (ID + नाम)
    private void setupObjectSpinner() {
        List playerObjects = Arrays.asList(
            new Player(1, "मेस्सी"),
            new Player(7, "रोनाल्डो"),
            new Player(10, "नेमार")
        );

        // कस्टम एडाप्टर या toString() ओवरराइड करें
        ArrayAdapter objectAdapter = new ArrayAdapter<>(this,
                android.R.layout.simple_spinner_item, playerObjects);
        // Player क्लास में toString() { return name; } होना चाहिए

        // ID द्वारा चयन
        int targetId = 7;
        for (int i = 0; i < objectAdapter.getCount(); i++) {
            if (objectAdapter.getItem(i).getId() == targetId) {
                spinnerPlayers.setSelection(i);
                break;
            }
        }
    }

    // Player डेटा क्लास
    static class Player {
        int id;
        String name;
        Player(int id, String name) { this.id = id; this.name = name; }
        int getId() { return id; }
        String getName() { return name; }
        @Override public String toString() { return name; }
    }
}

कस्टम एडाप्टर के साथ ऑब्जेक्ट-आधारित चयन

// कस्टम एडाप्टर जिसमें getItemId() ओवरराइड हो
public class PlayerAdapter extends ArrayAdapter {
    public PlayerAdapter(Context context, List players) {
        super(context, 0, players);
    }

    @Override
    public long getItemId(int position) {
        return getItem(position).getId(); // ID को आइटम ID के रूप में उपयोग
    }
}

// फिर ID द्वारा चयन:
long targetId = 7;
for (int i = 0; i < adapter.getCount(); i++) {
    if (adapter.getItemId(i) == targetId) {
        spinner.setSelection(i);
        break;
    }
}

चरण 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.app.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Kotlin एक्सटेंशन फंक्शन

// Spinner एक्सटेंशन
fun  Spinner.setSelectionByValue(value: T): Boolean {
    val adapter = this.adapter
    if (adapter == null) return false

    for (i in 0 until adapter.count) {
        if (adapter.getItem(i).equals(value)) {
            setSelection(i)
            return true
        }
    }
    return false
}

// उपयोग
spinnerPlayers.setSelectionByValue("क्रिस्टियानो रोनाल्डो")

सारांश: चयन विधियाँ

विधिउपयोगरिटर्न
setSelection(int position)इंडेक्स द्वारा चयनvoid
setSelection(int position, boolean animate)एनिमेशन के साथ इंडेक्स द्वाराvoid
कस्टम लूप + setSelectionमान/ऑब्जेक्ट प्रॉपर्टी द्वाराboolean (मिला/नहीं)
नोट: Spinner का एडाप्टर सेट होने के बाद ही setSelection() कॉल करें। यदि एडाप्टर बाद में बदलता है (notifyDataSetChanged), चयन रीसेट हो सकता है - आवश्यकतानुसार पुन: लागू करें।
  1. Android में व्यू की स्थिति को डायनामिकली कैसे सेट करें? Android में व्यू की स्थिति को डायनामिकली कैसे सेट करें?

    Android में व्यू की स्थिति प्रोग्रामेटिकली बदलने का गाइड यह ट्यूटोरियल दिखाता है कि कैसे RelativeLayout.LayoutParams और addRule() का उपयोग करके रनटाइम पर एक व्यू (TextView) की स्थिति को दूसरे व्यू (Button) के सापेक्ष बदला जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर न

  1. Android RecyclerView में चुने गए आइटम को सही तरीके से कैसे हाईलाइट करें? Android RecyclerView में चुने गए आइटम को सही तरीके से कैसे हाईलाइट करें?

    RecyclerView में आइटम सिलेक्शन हाईलाइटिंग - सही तरीका यह ट्यूटोरियल दिखाता है कि कैसे RecyclerView में सिंगल/मल्टी सिलेक्शन को सही ढंग से इम्प्लीमेंट किया जाता है, SparseBooleanArray और स्टेट-लिस्ट ड्रॉएबल का उपयोग करके। चरण 1: निर्भरताएं dependencies { implementation androidx.recyclerview:recy

  1. Android पर VPN कैसे सेट अप करें Android पर VPN कैसे सेट अप करें

    क्या आप अपने मोबाइल डिवाइस पर ब्राउज़ करते समय अधिक सुरक्षित रहना चाहते हैं? या सिर्फ Netflix पर क्षेत्र प्रतिबंधों को बायपास करना चाहते हैं? एक VPN (वर्चुअल प्राइवेट नेटवर्क) एक बढ़िया विकल्प है। लेकिन क्या आप Android पर VPN सेट अप कर सकते हैं? यहां बताया गया है कि अपने Android डिवाइस पर मोबाइल VPN