【发布时间】:2015-12-09 13:52:12
【问题描述】:
我正在尝试从数组中填充微调器。一切正常,但是当我单击微调器时,视图会将我带到数组的最后一项。所以我需要向上滚动才能看到第一项。
我想从头而不是从尾获得视图。请查看我的代码。我在 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());
}
}
见下图:
更新:我为此找到了一个更好、更简单的解决方案..
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;
}
}
}
【问题讨论】:
标签: android arrays xml view spinner