Android: जावा कोड से स्पिनर को प्रोग्रामेटिक रूप से भरें


84

आप प्रोग्राम कोड को जावा कोड से स्पिनर कैसे भरें?

मैं इस तरह लेआउट में एक स्पिनर है:

 <Spinner
     android:id="@+id/consultation_deseases"
     android:layout_width="@dimen/bigSpinnerWidth"
     android:layout_height="@dimen/bigSpinnerHeight"
     android:prompt="@string/disease_prompt" />

जावा कोड के साथ मुझे एडेप्टर बनाने और आइटम जोड़ने की आवश्यकता है।

जवाबों:


226
// you need to have a list of data that you want the spinner to display
List<String> spinnerArray =  new ArrayList<String>();
spinnerArray.add("item1");
spinnerArray.add("item2");

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    this, android.R.layout.simple_spinner_item, spinnerArray);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner sItems = (Spinner) findViewById(R.id.spinner1);
sItems.setAdapter(adapter);

यह भी पता लगाने के लिए कि क्या चुना गया है आप ऐसा कुछ कर सकते हैं

String selected = sItems.getSelectedItem().toString();
if (selected.equals("what ever the option was")) {
}

21

यहाँ एक उदाहरण के लिए पूरी तरह से प्रोग्राम है:

  • एक स्पिनर init।
  • इसे स्ट्रिंग सूची के माध्यम से डेटा के साथ भरें।
  • स्पिनर का आकार बदलें और इसे मेरे दृश्य में जोड़ें।
  • स्पिनर फ़ॉन्ट (फ़ॉन्ट आकार, रंग, गद्दी) को प्रारूपित करें।
  • स्पिनर को साफ़ करें।
  • स्पिनर में नए मान जोड़ें।
  • स्पिनर को फिर से तैयार करना।

मैं निम्न वर्ग प्रकारों का उपयोग कर रहा हूं:

Spinner varSpinner;
List<String> varSpinnerData;

float varScaleX;
float varScaleY;    

A - स्पिनर को सम्मिलित करें और रेंडर करें (varRoot मेरी मुख्य गतिविधि का एक संकेतक है):

public void renderSpinner() {


    List<String> myArraySpinner = new ArrayList<String>();

    myArraySpinner.add("red");
    myArraySpinner.add("green");
    myArraySpinner.add("blue");     

    varSpinnerData = myArraySpinner;

    Spinner mySpinner = new Spinner(varRoot);               

    varSpinner = mySpinner;

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, myArraySpinner);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down vieww
    mySpinner.setAdapter(spinnerArrayAdapter);

बी - आकार और मेरे विचार में स्पिनर जोड़ें:

    FrameLayout.LayoutParams myParamsLayout = new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT, 
            FrameLayout.LayoutParams.WRAP_CONTENT);
    myParamsLayout.gravity = Gravity.NO_GRAVITY;             

    myParamsLayout.leftMargin = (int) (100 * varScaleX);
    myParamsLayout.topMargin = (int) (350 * varScaleY);             
    myParamsLayout.width = (int) (300 * varScaleX);;
    myParamsLayout.height = (int) (60 * varScaleY);;


    varLayoutECommerce_Dialogue.addView(mySpinner, myParamsLayout);

सी - क्लिक हैंडलर बनाओ और फ़ॉन्ट सेट करने के लिए इसका उपयोग करें।

    mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int myPosition, long myID) {

            Log.i("renderSpinner -> ", "onItemSelected: " + myPosition + "/" + myID);

            ((TextView) parentView.getChildAt(0)).setTextColor(Color.GREEN);
            ((TextView) parentView.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (varScaleY * 22.0f) );
            ((TextView) parentView.getChildAt(0)).setPadding(1,1,1,1);


        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

    });

}   

D - नए डेटा के साथ स्पिनर को अपडेट करें:

private void updateInitSpinners(){

     String mySelected = varSpinner.getSelectedItem().toString();
     Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected);


     varSpinnerData.clear();

     varSpinnerData.add("Hello World");
     varSpinnerData.add("Hello World 2");

     ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged();
     varSpinner.invalidate();
     varSpinner.setSelection(1);

}

}

मैं अद्यतन में हल नहीं कर पाया है। InitSpinners, क्या करना है varSpinner.setSelection (0); और कस्टम फ़ॉन्ट सेटिंग्स अपने आप सक्रिय हो जाती हैं।

अपडेट करें:

यह "बदसूरत" समाधान varSpinner.setSelection (0) को हल करता है; मुद्दा, लेकिन मैं इससे बहुत खुश नहीं हूं:

private void updateInitSpinners(){

    String mySelected = varSpinner.getSelectedItem().toString();
    Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected);


    varSpinnerData.clear();

    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, varSpinnerData);
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    varSpinner.setAdapter(spinnerArrayAdapter);  


    varSpinnerData.add("Hello World");
    varSpinnerData.add("Hello World 2");

    ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged();
    varSpinner.invalidate();
    varSpinner.setSelection(0);

}

}

उम्मीद है की यह मदद करेगा......

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.