Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义适配器ViewHolder问题_Java_Android_Adapter - Fatal编程技术网

Java 自定义适配器ViewHolder问题

Java 自定义适配器ViewHolder问题,java,android,adapter,Java,Android,Adapter,我正在尝试为列表使用自定义适配器。此列表有两种类型的行,但我只使用一种布局(将可见性设置为View.GONE)时保留我不需要的项目)。但是,在尝试访问editbox样式行时,我不断收到类强制转换异常。我几乎没有定制适配器的经验。非常感谢你的帮助 下面是代码(我删除了setonclicklisteners以保持简短): 公共类SubEventListAdapter扩展了ArrayAdapter { 私有数组列表项; 私人语境(private Context)(私人语境);; public SubE

我正在尝试为列表使用自定义适配器。此列表有两种类型的行,但我只使用一种布局(将可见性设置为
View.GONE
)时保留我不需要的项目)。但是,在尝试访问editbox样式行时,我不断收到类强制转换异常。我几乎没有定制适配器的经验。非常感谢你的帮助

下面是代码(我删除了setonclicklisteners以保持简短):

公共类SubEventListAdapter扩展了ArrayAdapter
{
私有数组列表项;
私人语境(private Context)(私人语境);;
public SubEventListAdapter(上下文、ArrayList项)
{
super(上下文,R.layout.view\u选择\u事件\u项目3,项目);
此项。_项=项;
这._context=context;
}
静态类视窗夹
{
文本查看文本;
图像按钮图像按钮;
图像视图检查;
编辑文本编辑文本;
按钮;
}
@凌驾
public int getCount()
{
返回此项。_items.size();
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图v=转换视图;
最终持票人;
最终MobileSubEvent事件=_items.get(位置);
如果(v==null)
{
LayoutInflater\u充气器=(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
v=\u充气器。充气(R.layout.view\u select\u event\u item3,null);
viewHolder=新的viewHolder();
viewHolder.imagebutton=(imagebutton)v.findViewById(R.id.ibNext);
viewHolder.text=(TextView)v.findViewById(R.id.EVENT);
viewHolder.check=(ImageView)v.findviewbyd(R.id.ivCheck);
viewHolder.button=(button)v.findViewById(R.id.bscanosign);
viewHolder.editText=(editText)v.findViewById(R.id.etInput);
v、 setTag(视图持有者);
}否则
{
v=转换视图;
viewHolder=(viewHolder)v.getTag();//这里是类强制转换异常发生的地方
}
if(viewHolder.text!=null)
viewHolder.text.setText(this.u items.get(position.get_description());
v、 setTag(this._items.get(position));
...
返回v;
}
日志:

查看\选择\事件\项目3:

<?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中尝试此操作,如果convertView对象(View Holder对象)的类名与ViewHolder的类名不匹配(在我的示例中是VisitsListViewHolder),请检查其是否为空,以便为View Holder创建新实例

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

“editbox样式行”?@AhmadKayyali,我的意思是具有edittext字段
viewHolder.edittext=(edittext)v.findViewById(R.id.etInput)的行
此项?如果是,则显示视图选择事件项3.xml异常是正常的。创建行视图时,创建并设置一个
ViewHolder
作为标记,然后在下面指定一个
MobileSubEvent
项作为行标记。1.在列表视图中设置
EditText
项有点棘手,因此关于如何处理这个问题,stackoverflow有很多问题。2.适配器的
getView()
方法不正确,如果
条件没有
else
子句将行设置回正确的值,则可能是
if(convertView != null)
    {
     String className = convertView.getTag().getClass().getName();
     if(!className.equalsIgnoreCase("VisitsListViewHolder"))
     {
         convertView = null;
     }
    }