2016-03-16 2 views
0

я использую пользовательский адаптер для заполнения моего кока, но внутри getDropDownView я получаювертушки исключение держателя вида пользовательского адаптера

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.votingsystem.tsiro.adapters.FirmNamesSpnrNothingSelectedAdapter$ViewHolder 

FirmNamesSpnrNothingSelectedAdapter:

public class FirmNamesSpnrNothingSelectedAdapter extends ArrayAdapter<FirmNameWithID> { 

private static final String debugTag = FirmNamesSpnrNothingSelectedAdapter.class.getSimpleName(); 
protected static final int EXTRA = 1; 
protected SpinnerAdapter adapter; 
protected Context context; 
protected int nothingSelectedLayout; 
protected int nothingSelectedDropdownLayout; 
protected LayoutInflater layoutInflater; 
protected ArrayList<FirmNameWithID> firmNameWithIDs; 

public FirmNamesSpnrNothingSelectedAdapter(Context context, int resource, ArrayList<FirmNameWithID> objects) { 
    super(context, resource, objects); 
    this.firmNameWithIDs    = objects; 
    //this.adapter      = spinnerAdapter; 
    this.nothingSelectedLayout   = resource; 
    this.context      = context; 
    this.layoutInflater     = LayoutInflater.from(context); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    return getNothingSelectedView(parent); 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    Log.e(debugTag,"getDropDownView: "+position+" "+convertView); 
    View view = convertView; 
    ViewHolder viewHolder; 
    if (convertView == null) { 
     view     = layoutInflater.inflate(R.layout.spinner_dropdown_item, parent, false); 
     viewHolder   = new ViewHolder(view); 
     view.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) view.getTag(); 
    } 
    FirmNameWithID firmNameWithID = firmNameWithIDs.get(position); 
    viewHolder.dropdownItemTtv.setText(firmNameWithID.getFirm_name()); 
    viewHolder.dropdownItemTtv.setTag(firmNameWithID.getId()); 

    return view; 
} 

@Override 
public int getCount() { 
    return firmNameWithIDs.size(); 
} 

protected View getNothingSelectedView(ViewGroup parent) { 
    return layoutInflater.inflate(nothingSelectedLayout, parent, false); 
} 

static class ViewHolder { 
    TextView dropdownItemTtv; 

    public ViewHolder(View view) { 
     dropdownItemTtv = (TextView) view.findViewById(R.id.spnrDropdownItem); 
    } 
} 
} 

и кок конкретизации:

@Override 
public void onSuccessfulFirmNamesSpnrLoad(ArrayList<FirmNameWithID> firmNameWithIDArrayList) { 
pickFirmSpnr.setAdapter(new FirmNamesSpnrNothingSelectedAdapter(getActivity(), R.layout.spinner_selection_item, firmNameWithIDArrayList)); 

}

может ли кто-нибудь сказать мне, что я делаю неправильно? view = layoutInflater.inflate (R.layout.spinner_dropdown_item, parent, false); и dropdownItemTtv = (TextView) view.findViewById (R.id.spnrDropdownItem); содержат один и тот же вид

модель Класс:

@Override 
public void populateFirmNamesSpnr(final ArrayList<FirmNameWithID> firmNameWithIDArrayList, final RegisterInputFieldFinishedListener registerInputFieldFinishedListener) { 
    Call<Firm> call = apiService.getFirmNames("getFirmNames"); 
    call.enqueue(new Callback<Firm>() { 
     @Override 
     public void onResponse(Response<Firm> response, Retrofit retrofit) { 
      List<Firm.FirmElement> firmElementList = response.body().getFirm_element(); 
      for (int i = 0; i < firmElementList.size(); i++) { 
       Log.d(debugTag, "firm_id: " + firmElementList.get(i).getFirm_id() + " firm_name: " + firmElementList.get(i).getFirm_name()); 
       firmNameWithIDArrayList.add(new FirmNameWithID(firmElementList.get(i).getFirm_name(), firmElementList.get(i).getFirm_id())); 
      } 
      registerInputFieldFinishedListener.onSuccessfirmNamesSpnrLoad(firmNameWithIDArrayList); 
     } 
     @Override 
     public void onFailure(Throwable t) { 
      registerInputFieldFinishedListener.onFailurefirmNamesSpnrLoad(); 
     } 
    }); 
} 

FirmNameWithID класс:

public class FirmNameWithID { 

private String firm_name; 
private int id; 

public FirmNameWithID(String firm_name, int id) { 
    this.firm_name = firm_name; 
    this.id   = id; 
} 

public String getFirm_name() { return firm_name; } 

public void setFirm_name(String firm_name) { this.firm_name = firm_name; } 

public int getId() { return id; } 

public void setId(int id) { this.id = id; } 

@Override 
public String toString() { 
    return firm_name; 
} 
} 

spinner_dropdown_item.xml

<com.rey.material.widget.TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/spnrDropdownItem" android:layout_width="match_parent" android:layout_height="34dp" android:paddingLeft="8dp" android:singleLine="true" android:textSize="12sp" android:ellipsize="marquee" style="?android:attr/spinnerDropDownItemStyle" />

+0

Вы можете показать свой класс модели тоже – srinivas

+0

Я только что обновил свой ответ – tsiro

+0

не может видеть никакого обновления –

ответ

0

Проблема с этими кодами

viewHolder.dropdownItemTtv.setText(firmNameWithID.getFirm_name()); 
viewHolder.dropdownItemTtv.setTag(firmNameWithID.getId()); 

Проверить firmNameWithID.getFirm_name() и firmNameWithID.getId() возвращая значение строки, если она возвращает кроме строки, то и нужно, чтобы преобразовать его в строку и установить его в текстовом виде.

+0

Что сказал naveen правильно getId возвращает целочисленное значение, если iam не является неправильным.please use viewHolder.dropdownItemTtv.setTag (Integer.toString (firmNameWithID.getId())); – srinivas

+0

такое же исключение снова .. – tsiro

+0

Я думаю, вы не изменили тип ID viewHolder.dropdownItemTtv.setTag (firmNameWithID.getId(). ToString()); используйте один и тот же там один раз – srinivas

Смежные вопросы