簡體   English   中英

自定義適配器ViewHolder問題

[英]Custom Adapter ViewHolder issue

我正在嘗試將自定義適配器用於列表。 該列表有兩種類型的行,但我僅使用一種布局(將不需要的項目保留為View.GONE )。 但是,當嘗試訪問editbox樣式的行時,我總是收到Class強制轉換異常。 我對定制適配器的經驗很少。 非常感謝您的幫助:D

這是代碼(我刪除了setonclicklisteners以使其簡短):

public class SubEventListAdapter extends ArrayAdapter<MobileSubEvent>
{

    private ArrayList<MobileSubEvent> _items;
    private Context _context;

    public SubEventListAdapter(Context context, ArrayList<MobileSubEvent> items)
        {
            super(context, R.layout.view_select_event_item3, items);
            this._items = items;
            this._context = context;
        }

    static class ViewHolder
        {
            TextView text;
            ImageButton imagebutton;
            ImageView check;
            EditText editText;
            Button button;
        }

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


    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
        {
            View v = convertView;
            final ViewHolder viewHolder;
            final MobileSubEvent event = _items.get(position);

            if (v == null)
                {
                    LayoutInflater _inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = _inflater.inflate(R.layout.view_select_event_item3, null);
                    viewHolder = new ViewHolder();
                    viewHolder.imagebutton = (ImageButton) v.findViewById(R.id.ibNext);
                    viewHolder.text = (TextView) v.findViewById(R.id.EVENT);
                    viewHolder.check = (ImageView) v.findViewById(R.id.ivCheck);
                    viewHolder.button = (Button) v.findViewById(R.id.bScanOrSign);
                    viewHolder.editText = (EditText) v.findViewById(R.id.etInput);

                            v.setTag(viewHolder);

                } else
                {
                    v  = convertView;
                     viewHolder = (ViewHolder) v.getTag(); //here is where the class cast exception occurs
                }


            if (viewHolder.text != null)
                viewHolder.text.setText(this._items.get(position).get_description());
            v.setTag(this._items.get(position));

     ...


     return v;
        }

Logcat: 在此處輸入圖片說明

view_select_event_item3:

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

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:padding="5dip" >

    <ImageView
        android:id="@+id/ivCheck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_gravity="center_vertical"
        android:background="@drawable/check"
        android:focusable="false"
        android:visibility="invisible" />

    <TextView
        android:id="@+id/EVENT"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/ivCheck"
        android:background="@android:color/transparent"
        android:padding="5dp"
        android:text="Sample text"
        android:textSize="20sp"
        android:textStyle="bold" 
        android:visibility="visible"
        />

    <EditText
        android:id="@+id/etInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="130dp"
        android:maxWidth="165dp"
        android:layout_toRightOf="@id/ivCheck"
        android:background="@android:drawable/editbox_background"
        android:padding="5dp"
        android:hint="Hint text"
        android:singleLine="true"
        android:text=""
        android:textSize="20sp"
        android:visibility="invisible"
         />

    <Button 
         android:id="@+id/bScanOrSign"
        android:layout_width="62dp"
        android:layout_height="32dp"
        android:layout_gravity="center_vertical"
        android:layout_toLeftOf="@id/ibNext"
        android:text="Scan"
        android:visibility="invisible" 
        />

    <ImageButton
        android:id="@+id/ibNext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_gravity="right|center_vertical"
        android:background="@drawable/right"
        android:visibility="invisible" />

</RelativeLayout>

在getView中嘗試此操作,如果它與您的ViewHolder的類名不匹配(在我的情況下為VisitsListViewHolder),請檢查convertView對象(View Holder對象)的類名-將其設置為null,以便為該實例創建新實例視圖持有人

if(convertView != null)
    {
     String className = convertView.getTag().getClass().getName();
     if(!className.equalsIgnoreCase("VisitsListViewHolder"))
     {
         convertView = null;
     }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM