# चयन-योग्य सरल सूची कैसे बनाएँ

> टेक्स्ट की सूची दिखाएँ और ListView के साथ चयन कैप्चर करें (SINGLE या MULTIPLE)।

Source: https://crossfly.dev/hi/docs/cookbook/lists/lista-simples — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# चयन-योग्य सरल सूची कैसे बनाएँ

**उद्देश्य.** टेक्स्ट आइटम की एक स्क्रॉल-योग्य सूची दिखाएँ और तब प्रतिक्रिया दें जब उपयोगकर्ता
एक (SINGLE) या कई (MULTIPLE) का चयन करे। `ListView` एक एम्बेड-योग्य `Component` है: आप इसे किसी भी
लेआउट में जोड़ सकते हैं, बिना किसी विंडो की जरूरत के।

## उपयोग की गई APIs
- `new ListView(String[] items, ListView.ItemType type)` — टेक्स्ट के एक ऐरे से सूची बनाता है।
- `new ListView(String title, String[] items, ListView.ItemType type)` — वही, शीर्षक हेडर के साथ।
- `ListView.ItemType.SINGLE` / `ListView.ItemType.MULTIPLE` — enum के केवल दो मान। `SINGLE` = टैप चयन करता है और `onConfirm` को ट्रिगर करता है; `MULTIPLE` = चेकबॉक्स + "पुष्टि करें" बटन।
- `ListView.onConfirm(Component.Action action)` — पुष्टि करने पर ट्रिगर होने वाला callback। यह ईवेंट के स्रोत के रूप में स्वयं `ListView` प्राप्त करता है।
- `ListView.getSelectedText()` / `getSelectedIndex()` — पहला चयनित आइटम (टेक्स्ट/इंडेक्स), या `null`/`-1`।
- `ListView.getSelectedTexts()` / `getSelectedIndices()` — सभी चयनित (MULTIPLE में उपयोगी)।
- `ListView.confirmText(String)` — पुष्टि बटन का टेक्स्ट (default `"Confirmar"`, केवल MULTIPLE में)।

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      String[] frutas = {"Maçã", "Banana", "Laranja", "Uva"};

      // SINGLE: tap ही चुनता है और onConfirm ट्रिगर करता है
      ListView lista = new ListView("Escolha uma fruta", frutas, ListView.ItemType.SINGLE);
      lista.onConfirm(e ->
      {
         String texto = lista.getSelectedText();   // उदा.: "Banana"
         int idx = lista.getSelectedIndex();       // उदा.: 1
         Debug.log("Selecionado: " + texto + " (#" + idx + ")");
         return null;
      });
      add(LAY_FILL, lista);   // ListView एक Component है: सीधे लेआउट में आता है
   }
}
```

> नीचे का अंश **केवल मुख्य भाग** दिखाता है। इसे चलाने के लिए, इसे ऊपर दिए `MainWindow` ढाँचे में रखें।

## न्यूनतम अंश
```java
// स्रोत में सत्यापित: ListView.java
String[] frutas = {"Maçã", "Banana", "Laranja", "Uva"};

// SINGLE: tap ही चुनता है और onConfirm ट्रिगर करता है
ListView lista = new ListView("Escolha uma fruta", frutas, ListView.ItemType.SINGLE);
lista.onConfirm(e ->
{
   String texto = lista.getSelectedText();   // उदा.: "Banana"
   int idx = lista.getSelectedIndex();       // उदा.: 1
   Debug.log("Selecionado: " + texto + " (#" + idx + ")");
   return null;
});
layout.add(.9f, lista);   // ListView एक Component है: सीधे लेआउट में आता है
```

```java
// MULTIPLE: checkboxes; onConfirm केवल "Confirmar" बटन दबाने पर ट्रिगर होता है
ListView multi = new ListView("Selecione ingredientes", frutas, ListView.ItemType.MULTIPLE);
multi.confirmText("Adicionar");
multi.onConfirm(e ->
{
   String[] escolhidas = multi.getSelectedTexts();   // सभी चयनित
   return null;
});
layout.add(.9f, multi);
```

## और गहराई में जाएँ
- एम्बेडेड के बजाय एक मोडल पॉपअप चाहिए? देखें [popup-de-selecao.md](/docs/cookbook/lists/popup-de-selecao)।
- हजारों आइटम? `ListView` का उपयोग न करें (यह सब कुछ मटेरियलाइज़ करता है); देखें [lista-virtual-grande.md](/docs/cookbook/lists/lista-virtual-grande)।
- विजेट गाइड: [ListView](/docs/ui/widgets/listview) · आधिकारिक स्रोत: अध्याय 15
