Khi bạn triển khai SpinnerAdapter, bạn nhận được getDropDownView, cách khác với getView
mà bạn có khi cần mở rộng BaseAdapter
.Sự khác biệt giữa getView & getDropDownView trong SpinnerAdapter
Trả lời
Nếu chúng ta xem mã sau, chúng ta có mảng tên và giá trị trong getView và 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;
}
}
Nếu phương thức getDropDownView không được triển khai, cửa sổ thả xuống sẽ hiển thị khung nhìn từ getView. Do đó, nó sẽ chỉ hiển thị tên.
Khi cả hai getView và getDropDownView được thực hiện, cựu nhận tên và sau này bị giá trị, spinner ở phần còn lại sẽ nhận được tên từ getview và thả xuống bật lên sẽ nhận được giá trị.
Câu trả lời được chấp nhận có vẻ hơi phức tạp, vì vậy vì đơn giản
getView
- giá trị được hiển thị trên spinner trước khi người dùng nhấn spinner, nơi từng xem giá trị có thể được điều chỉnh với các convertView tham sốgetDropDownView
- danh sách giá trị mà người dùng có thể chọn sau khi người dùng nhấn spinner, trong đó mỗi giá trị trong danh sách có thể được điều chỉnh theo thông số convertView
Chúng là 'Chế độ xem', không phải giá trị. 'getView()' là cho 'Chế độ xem' duy nhất mà bạn thấy trước khi' Spinner' được khai thác. 'getDropDownView()' là cho chồng đứng của 'View' mà bạn thấy khi 'Spinner' được khai thác. Bạn có thể sử dụng hai phương thức để tạo/điền vào từng loại của 'Loại' theo yêu cầu của bạn. –
getView
và getDropDownView
có thể hiển thị bố cục khác.
Tôi tạo Spinner và sử dụng class ImageTextAdapter extends ArrayAdapter<String>
làm bộ điều hợp. Tôi ghi đè getView
để nó có thể hiển thị cả ImageView
và TextView
. Tuy nhiên, tôi không ghi đè getDropDownView
.
Đây là một ảnh chụp màn hình trước khi spinner được nhấn
và sau khi spinner được nhấn.
Tôi khởi tạo trình quay với mã sau đây.
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);
Đây là 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;
}
}
Cảm ơn. Câu trả lời hay nhất! –
Chúng ta có thể sử dụng SpinnerAdapter như thế này:
public class FolderSpinnerAdpater extends BaseAdapter implements SpinnerAdapter {
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
}
Trong BaseAdapter.java
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getView(position, convertView, parent);
}
Override getView()
và getDropDownView()
, trở về điểm khác nhau, bạn sẽ thấy sự khác biệt.
chúng ta có thể xem tại đây giống như máy quay đơn giản không? – stackoverflow
thats những gì tôi muốn, chắc chắn cảm ơn +1. –