Otrzymuję dane z bazy danych SQLite i przypisuję je do obiektów danych. Używam niestandardowego adaptera spinner (implementuje SpinnerAdapter
), aby umieścić je w spinnerach, aby zastąpić metody getItem()
i getItemId()
. Jednak android.R.layout.simple_spinner_dropdown_item
nie wyświetla prawidłowo (zrzuty ekranu z mojego Galaxy Tab 2 10.1):Niestandardowe wyświetlanie niestandardowego adaptera spinningu simple_spinner_dropdown
Natomiast to spinner, który jest wypełniana od tablicy w R.array
(prawidłowego wyglądu/wielkości):
Sporządzono przez ten kod:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.quote_prices, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Nie jestem w stanie uzyskać tego wyglądu poprzez implementację/rozszerzenie jakiegoś adaptera (próbowałem również rozszerzyć BaseAdapter
bez rezultatu). To jest kod dla adaptera spinner w stanie:
public class MySpinnerAdapter implements SpinnerAdapter {
private Context context;
/**
* The internal data (the ArrayList with the Objects).
*/
private List<? extends BaseDO> data;
public MySpinnerAdapter(Context context, List<?extends BaseDO> data){
this.context = context;
this.data = data;
}
/**
* Returns the Size of the ArrayList
*/
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return data.get(position).getId();
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(android.R.layout.simple_spinner_dropdown_item, null);
}
((TextView) convertView).setText(data.get(position).toString());
return convertView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = (TextView) View.inflate(context, android.R.layout.simple_spinner_item, null);
textView.setText(data.get(position).toString());
return textView;
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
public List<? extends BaseDO> getData() {
return data;
}
}
Każda pomoc zostanie doceniona.
EDIT: Zapomniałem wspomnieć, że nazywa się to za pomocą
spnnrTerm.setAdapter(new MySpinnerAdapter(getActivity(), termList));
Interesujące, będę musiał wykopać aplikację skądś ... Wrócę do ciebie. – Rob
Mam go do pracy, dobre miejsce w źródle. Redagowałem kod nieco, ponieważ funkcja 'inflate()' w metodzie 'getView()' nie istnieje, tak jak to określiłeś. W rzeczywistości dało mi to błędy, gdy podawałem rodzicowi tę funkcję, więc ostatecznie wszystko, co było konieczne, to zmiana pierwszego 'nadmuchania()'. – Rob