0

I'm Using a spinner to show some data from my database, in main activity I set my custom adapter to the spinner

PazienteSpinnerAdapter pazienteAdapter = new PazienteSpinnerAdapter(this,mDb.getAllPazienti());
spn_nome.setAdapter(pazienteAdapter);

This is the class of my custom adapter

public class PazienteSpinnerAdapter extends ArrayAdapter<Paziente_DA> {
private final Context context;
private final ArrayList<Paziente_DA> pazienti;
private ArrayList<Paziente_DA> suggestions;

public PazienteSpinnerAdapter(Context context, ArrayList<Paziente_DA> values) {
    super(context, R.layout.item_pazienti_small, values);
    this.context = context;
    this.pazienti = values;
    this.suggestions = new ArrayList<Paziente_DA>();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Paziente_DA paziente = pazienti.get(position);
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.item_pazienti_small, parent, false);
    TextView txt_nome = (TextView) rowView.findViewById(R.id.txt_item_pazienti_nome);
    TextView txt_data = (TextView) rowView.findViewById(R.id.txt_item_pazienti_data);


    txt_nome.setText(paziente.getNome());
    final Time data = new Time();
    data.set(paziente.getData_nasciata());
    txt_data.setText(data.format("%d/%m/%Y"));


    return rowView;
}

@Override
public Filter getFilter() {
    return nameFilter;
}

Filter nameFilter = new Filter() {
    public String convertResultToString(Object resultValue) {
        Paziente_DA paziente = (Paziente_DA) (resultValue);
        final Time data = new Time();
        return paziente.getNome();
    }

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        if (constraint != null) {
            suggestions.clear();
            for (Paziente_DA paziente : pazienti) {
                if (paziente.getNome().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
                    suggestions.add(paziente);
                }
            }
            FilterResults filterResults = new FilterResults();
            filterResults.values = suggestions;
            filterResults.count = suggestions.size();
            return filterResults;
        } else {
            return new FilterResults();
        }
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        ArrayList<Paziente_DA> filteredList = (ArrayList<Paziente_DA>) results.values;
        if (results != null && results.count > 0) {
            clear();
            for (Paziente_DA c : filteredList) {
                add(c);
            }
            notifyDataSetChanged();
        }
    }
};

}

this is the layout of the adapter

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:textSize="20sp"
        android:padding="3dp"
        android:textColor="@android:color/black"
        android:id="@+id/txt_item_pazienti_nome" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:textSize="20sp"
        android:padding="3dp"
        android:textColor="@android:color/black"
        android:id="@+id/txt_item_pazienti_data" />
</LinearLayout>

When I click on the spinner, and the list must be shown i got this error "java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView"

I search on internet and also here on Stack, but nobody use a custom adapter.

this is the log

java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
            at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
            at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415)
            at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:853)
            at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:849)
            at android.widget.Spinner.measureContentWidth(Spinner.java:734)
            at android.widget.Spinner$DropdownPopup.computeContentWidth(Spinner.java:1081)
            at android.widget.Spinner$DropdownPopup.show(Spinner.java:1107)
            at android.widget.Spinner.performClick(Spinner.java:658)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView
            at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:379)
            at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415)
            at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:853)
            at android.widget.Spinner$DropDownAdapter.getView(Spinner.java:849)
            at android.widget.Spinner.measureContentWidth(Spinner.java:734)
            at android.widget.Spinner$DropdownPopup.computeContentWidth(Spinner.java:1081)
            at android.widget.Spinner$DropdownPopup.show(Spinner.java:1107)
            at android.widget.Spinner.performClick(Spinner.java:658)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
Stefano
  • 3,127
  • 2
  • 27
  • 33

0 Answers0