显示Spinner中的最新项目查看Android

Nik*_*ain 2 xml arrays android view spinner

我试图从数组填充微调器.一切正常,但是当我点击微调器时,视图会将我带到数组的最后一项.所以我需要向上滚动才能看到第一项.

我想从头开始而不是从头到尾.请查看我的代码.我在我的XML中使用了android:spinnerMode ="dialog".

我的spinner1正在显示视图中的最后一项,但所有项目都按正确顺序排列.

public class Pinbyplace extends AppCompatActivity {

Spinner spinner1, spinner2, spinner3;
ArrayAdapter<String> adapter1, adapter2, adapter3;

public String[] state = {"Andaman and Nicobar Islands", "Andhra Pradesh", "Arunachal Pradesh", "Assam",
        "Bihar", "Chandigarh", "Chhattisgarh", "Dadar and Nagar Haveli",
        "Daman and Diu", "Delhi", "Goa", "Gujarat", "Haryana", "Himachal Pradesh",
        "Jammu and Kashmir", "Jharkhand", "Karnataka", "Kerala", "Lakshadeep",
        "Madya Pradesh", "Maharashtra", "Manipur", "Meghalaya", "Mizoram", "Nagaland",
        "Odhisa", "Pondicherry","Punjab", "Rajasthan", "Sikkim", "Tamil Nadu",enter code here
        "Tripura", "Uttaranchal", "Uttar Pradesh", "West Bengal", "Select State"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pincode_place);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

    spinner1 = (Spinner) findViewById(R.id.spinner1);
    spinner2 = (Spinner) findViewById(R.id.spinner2);
    spinner3 = (Spinner) findViewById(R.id.spinner3);

    adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, state) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);
            if (position == getCount()) {
                ((TextView)v.findViewById(android.R.id.text1)).setText("");
                ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount()));
            }
            return v;
        }

        @Override
        public int getCount() {
            return super.getCount()-1;
        }
    };

    //adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner1.setAdapter(adapter1);
    spinner1.setSelection(adapter1.getCount());

    adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);
            if (position == getCount()) {
                ((TextView)v.findViewById(android.R.id.text1)).setText("");
                ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount()));
            }
            return v;
        }

        @Override
        public int getCount() {
            return super.getCount() - 1;
        }
    };

    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter2.add("Item 1");
    adapter2.add("Item 2");
    adapter2.add("Select District");

    spinner2.setAdapter(adapter2);
    spinner2.setSelection(adapter2.getCount());

    adapter3 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);
            if (position == getCount()) {
                ((TextView)v.findViewById(android.R.id.text1)).setText("");
                ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount()));
            }
            return v;
        }

        @Override
        public int getCount() {
            return super.getCount()-1;
        }
    };

    adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter3.add("Item 1");
    adapter3.add("Item 2");
    adapter3.add("Select Place");

    spinner3.setAdapter(adapter3);
    spinner3.setSelection(adapter3.getCount());

}
 }
Run Code Online (Sandbox Code Playgroud)

见下图:

在此输入图像描述

在此输入图像描述

更新:我找到了一个更好,更简单的解决方案..

public class Pinbyplace extends AppCompatActivity {

Spinner spinner_state, spinner_district, spinner_place;
HintArrayAdapter hintAdapter_state, hintAdapter_district, hintAdapter_place;

public String[] state = {"Select State", "Andaman and Nicobar Islands","Andhra Pradesh",
        "Arunachal Pradesh","Assam","Bihar", "Chandigarh","Chhattisgarh",
        "Dadra and Nagar Haveli","Daman and Diu","Delhi", "Goa","Gujarat","Haryana",
        "Himachal Pradesh","Jammu and Kashmir","Jharkhand", "Karnataka","Kerala",
        "Lakshadweep","Madhya Pradesh","Maharashtra","Manipur", "Meghalaya","Mizoram",
        "Nagaland","Odisha","Puducherry","Punjab","Rajasthan", "Sikkim","Tamil Nadu",
        "Telangana","Tripura","Uttar Pradesh","Uttarakhand","West Bengal"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pincode_place);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

    spinner_state = (Spinner) findViewById(R.id.spinner1);
    spinner_district = (Spinner) findViewById(R.id.spinner2);
    spinner_place = (Spinner) findViewById(R.id.spinner3);

    hintAdapter_state = new HintArrayAdapter<>(getApplicationContext(), 0);
    hintAdapter_state.addAll(state);
    spinner_state.setAdapter(hintAdapter_state);

    spinner_state.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(position > 0) {
                spinner_state.setSelection(position);
                String state_name = (String) spinner_state.getSelectedItem();
                Toast.makeText(getApplication(), state_name, Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    hintAdapter_district = new HintArrayAdapter<>(getApplicationContext(), 0);
    hintAdapter_district.add("Select Distrcit");
    spinner_district.setAdapter(hintAdapter_district);

    spinner_district.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(position > 0) {
                spinner_district.setSelection(position);
                String district_name = (String) spinner_district.getSelectedItem();
                Toast.makeText(getApplication(), district_name, Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    hintAdapter_place = new HintArrayAdapter<>(getApplicationContext(), 0);
    hintAdapter_place.add("Select Place");
    spinner_place.setAdapter(hintAdapter_place);

    spinner_place.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(position > 0) {
                spinner_place.setSelection(position);
                String place_name = (String) spinner_place.getSelectedItem();
                Toast.makeText(getApplication(), place_name, Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

private class HintArrayAdapter<T> extends ArrayAdapter<T> {

    Context mContext;

    public HintArrayAdapter(Context context, int resource) {
        super(context, resource);
        this.mContext = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        TextView texview = (TextView) view.findViewById(android.R.id.text1);
        texview.setTextColor(Color.BLACK);
        texview.setHintTextColor(Color.GRAY);

        if(position == 0) {
            texview.setText("");
            texview.setHint(getItem(position).toString()); //"Hint to be displayed"
        } else {
            texview.setText(getItem(position).toString());
        }

        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view;

        if(position == 0){
            view = inflater.inflate(R.layout.spinner_hint_list_item_layout, parent, false); // Hide first row
        } else {
            view = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
            TextView texview = (TextView) view.findViewById(android.R.id.text1);
            texview.setTextColor(Color.BLACK);
            texview.setText(getItem(position).toString());
        }

        return view;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Mau*_*oki 5

 adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter3.add("Item 1");
    adapter3.add("Item 2");
    adapter3.add("Select Place");

    spinner3.setAdapter(adapter3);
    spinner3.setSelection(adapter3.getCount());
Run Code Online (Sandbox Code Playgroud)

改成

spinner3.setSelection(0);
Run Code Online (Sandbox Code Playgroud)

Beacuse spinner3.setSelection(adapter3.getCount()); 意味着Spinner Postion是您的数组大小.所以Spinner Goto Last Index ......