android - SpinnerAdapter में getView & getDropDownView के बीच अंतर




android-arrayadapter android-spinner (3)

जब आप SpinnerAdapter को कार्यान्वित करते हैं तो आपको getDropDownView मिलता है, यह getView से अलग कैसे होता है जो आपके पास तब होता है जब आपको BaseAdapter को विस्तारित करने की आवश्यकता BaseAdapter


यदि हम निम्नलिखित कोड को देखते हैं, तो हमारे पास getView और getDropDownView में नाम और मूल्य सरणी है।

private void initView() {
    SpinnerDropDownAdapter sddadapter = new SpinnerDropDownAdapter(this);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, sddadapter.name);

    Spinner getViewSP = (Spinner) findViewById(R.id.getview_sp);
    getViewSP.setAdapter(adapter);

    Spinner getViewWDropDownSP = (Spinner) findViewById(R.id.getview_w_drop_down_sp);
    getViewWDropDownSP.setAdapter(sddadapter);
}

static class SpinnerDropDownAdapter extends BaseAdapter implements
        SpinnerAdapter {
    Context context;

    SpinnerDropDownAdapter(Context ctx) {
        context = ctx;
    }

    String[] name = { " One", " Two", " Three", " Four", " Five", " Six",
            " Seven", " Eight" };
    String[] value = { " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8" };

    @Override
    public int getCount() {
        return name.length;
    }

    @Override
    public String getItem(int pos) {
        // TODO Auto-generated method stub
        return name[pos];
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView text = new TextView(context);
        text.setTextColor(Color.BLACK);
        text.setText(name[position]);
        return text;
    }

    @Override
    public View getDropDownView(int position, View convertView,
            ViewGroup parent) {
        TextView text = new TextView(context);
        text.setTextColor(Color.BLACK);
        text.setText(value[position]);
        return text;
    }
}

यदि getDropDownView पद्धति लागू नहीं हुई है, तो ड्रॉप डाउन पॉप अप को getView से दृश्य मिल जाएगा। इस प्रकार, यह केवल नाम दिखाएगा।

जब getView और getDropDownView दोनों को लागू किया जाता है, तो पूर्व प्राप्त नाम और बाद में प्राप्त होने वाला मूल्य , बाकी पर स्पिनर को गेटव्यू से नाम मिलेगा और ड्रॉप डाउन पॉप अप को मूल्य मिलेगा।


स्वीकृत उत्तर थोड़ा जटिल लगता है, इसलिए सरलता के लिए

  • getView - उपयोगकर्ता द्वारा स्पिनर दबाने से पहले स्पिनर पर दिखाया गया मान, जहां प्रत्येक मान दृश्य को कन्वर्ट व्यू पैरामीटर के साथ समायोजित किया जा सकता है

  • getDropDownView - उपयोगकर्ता द्वारा स्पिनर दबाने के बाद उपयोगकर्ता द्वारा चुने जा सकने वाले मूल्यों की सूची, जहां सूची में प्रत्येक मान को कन्वर्ट व्यू पैरामीटर के साथ अनुकूलित किया जा सकता है


getView और getDropDownView विभिन्न लेआउट दिखा सकते हैं।

मैं एक स्पिनर बनाता हूं और class ImageTextAdapter extends ArrayAdapter<String> उपयोग class ImageTextAdapter extends ArrayAdapter<String> एक एडाप्टर के रूप में class ImageTextAdapter extends ArrayAdapter<String> । मैं getView ओवरराइड करता getView ताकि यह TextView और getView दोनों को दिखा सके। हालाँकि, मैं getDropDownView ओवरराइड नहीं getDropDownView

स्पिनर को दबाने से पहले यह एक स्क्रीनशॉट है

और स्पिनर को दबाने के बाद।

मैं निम्नलिखित कोड के साथ स्पिनर को आरंभीकृत करता हूं।

String[] spinnerTexts = {"Tanzania", "Thailand"};
int[] spinnerImages = {R.drawable.tanzania, R.drawable.thailand};

ArrayAdapter<String> adapter = new ImageTextAdapter(this, spinnerTexts, spinnerImages);

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);

यहाँ ImageTextAdapter.java है

public class ImageTextAdapter extends ArrayAdapter<String> {

    int[] images;

    public ImageTextAdapter(Context ctx, String[] texts, int[] images) {
        super(ctx, android.R.layout.simple_spinner_item, texts);
        this.images = images;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = getLayoutInflater().inflate(R.layout.row, parent, false);

        TextView textView = (TextView) row.findViewById(R.id.textView);
        textView.setText(getItem(position));

        ImageView imageView = (ImageView) row.findViewById(R.id.imageView);
        imageView.setImageResource(images[position]);

        return row;
    }
}




baseadapter