【问题标题】:getView from customized ArrayAdapter isn't called未调用来自自定义 ArrayAdapter 的 getView
【发布时间】:2014-10-23 17:05:20
【问题描述】:

由于某些原因,我的自定义 ArrayAdapter 的 getView(int position, View convertView, ViewGroup parent) 没有被调用,并且 android 显示一个空列表。我已经覆盖了 getCount()

public class CEL_ElementsFromXMLArrayAdapter extends ArrayAdapter<LinkedHashMap<RoomItem, LinkedHashMap<ItemType, List<RoomDamage>>>> {

private Context context;
private int resource;
private List<LinkedHashMap<RoomItem, LinkedHashMap<ItemType, List<RoomDamage>>>> elementsFromXMLList;

public CEL_ElementsFromXMLArrayAdapter(Context context, int resource,
        List<LinkedHashMap<RoomItem, LinkedHashMap<ItemType, List<RoomDamage>>>> elementsFromXMLList) {
    super(context, resource, elementsFromXMLList);

    this.context = context;
    this.resource = resource;
    this.elementsFromXMLList = elementsFromXMLList;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    final int positionItem = position;
    View view;
    LayoutInflater viewInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if(convertView != null)
        view = convertView;
    else
        view = viewInflater.inflate(R.layout.etat_piece_item, parent, false);
    {...}
    return view;
}

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

这就是我设置适配器的方式:

CEL_ElementsFromXMLArrayAdapter cel_ElementsFromXMLArrayAdapter = new CEL_ElementsFromXMLArrayAdapter(mContext, R.layout.etat_piece_item, elementsFromXMLLinkedHashMap);
            listViewElements.setAdapter(cel_ElementsFromXMLArrayAdapter);

我从昨天开始一直在寻找解决方案,我已经阅读了 StackOverflow 上的所有帖子,但没有一个符合我的问题。所以我想知道,它是否可以来自 LinkedHashMap<...>

编辑:这是我的布局 R.layout.etat_piece_item

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mis2_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="1dip"
    android:background="@color/white"
    android:orientation="horizontal"
    android:weightSum="12" >

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <TextView
        android:id="@+id/descriptionElement_TextView"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="2"
        android:clickable="true"
        android:gravity="center"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:textColor="@color/black1"
        android:textSize="@dimen/mis_item_size" />

    <ImageView
        android:id="@+id/stroke_dim"
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <Spinner
        android:id="@+id/typeElement_Spinner"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="3dp"
        android:layout_weight="2.5"
        android:background="@drawable/spinner_ab_default"
        android:clickable="true"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:textSize="@dimen/mis_item_size"
        android:textStyle="normal" />

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <EditText
        android:id="@+id/quantiteElement_EdiText"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:inputType="number"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:singleLine="true"
        android:textColor="@color/black1"
        android:textSize="@dimen/mis_item_size" />

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <TextView
        android:id="@+id/etatElement_TextView"
        style="@android:style/Widget.Holo.Light.EditText"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_marginLeft="3dp"
        android:layout_marginRight="3dp"
        android:layout_weight="1.5"
        android:clickable="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:onClick="callChooseEtat"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:textStyle="normal" />

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <TextView
        android:id="@+id/ent_obervations_val"
        style="@android:style/Widget.Holo.Light.EditText"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="2"
        android:clickable="true"
        android:gravity="center"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:singleLine="true"
        android:textColor="@color/black1"
        android:textSize="@dimen/mis_item_size" />

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <LinearLayout
        android:id="@+id/imageLayout"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:clickable="true"
        android:gravity="center"
        android:onClick="callCameraInList" >

        <ImageView
            android:id="@+id/photoElement_ImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|center_horizontal"
            android:contentDescription="@string/img"
            android:src="@drawable/photo_img" />
    </LinearLayout>

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <EditText
        android:id="@+id/trouElement_EditText"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:hint="@string/zero"
        android:inputType="number"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:singleLine="true"
        android:textColor="@color/black1"
        android:textSize="@dimen/mis_item_size" />

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

    <TextView
        android:id="@+id/actionElement_TextView"
        style="@android:style/Widget.Holo.Light.EditText"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:clickable="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:gravity="center"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:singleLine="true"
        android:textColor="@color/black1"
        android:textSize="@dimen/mis_item_size" />

    <ImageView
        android:layout_width="@dimen/stroke_dim"
        android:layout_height="fill_parent"
        android:background="@color/light_line"
        android:contentDescription="@string/img" />

</LinearLayout>

【问题讨论】:

  • 您确定您的elementsFromXMLList 中确实有元素吗?另外,getItemgetItemId 的实现是什么?
  • 是的 getCount() 返回 30。但我没有覆盖 getItem 和 getItemId,有必要吗?
  • 当您填充基础列表时,您是否称适配器上的通知数据集已更改(不知道它到底叫什么,因为我现在无法访问 Eclipse)?您是否在任何地方“新建”列表而不是清除并重新填充它?如果对 (1) 的回答是否定的,或者对 (2) 的回答是肯定的,那就是问题所在。
  • @Guimareshh:重写它当然是完全允许的(因为该方法不是最终的),并且与重写 getCount 一样有意义
  • @njzk2 哦,是的,你正确地覆盖了 getItem 和 getItemId,我犯了一个错误。但不幸的是,覆盖这些方法并不能解决我的问题。

标签: java android android-listview android-arrayadapter


【解决方案1】:

它正在被调用,它只返回一个空值。对于第一次 getView 调用,ConvertView 为 null,因此您必须膨胀某些东西(即使它不是您的第一个位置也不能保证它不是 null)并且您似乎没有膨胀任何东西。

试试这个:

if(convertView != null)
  view = convertView;
else
  view = viewInflater.inflate(R.layout.yourlayout, parent, false);

其中 R.layout.yourlayout 是您要用于填充列表的布局。

【讨论】:

  • 我已经在这样做了(它在 {...} 内),我确定它没有被调用。实际上,在调试模式下不会调用 getView()。
【解决方案2】:

您是否尝试过实际膨胀视图而不是使用转换视图。 只有在数组适配器中填充了至少一个视图时,Convertview 才会不为空

【讨论】:

    【解决方案3】:
        public class CEL_ElementsFromXMLArrayAdapter extends ArrayAdapter<LinkedHashMap<RoomItem, LinkedHashMap<ItemType, List<RoomDamage>>>> {
    
        private Context context;
        private int resource;
        private List<LinkedHashMap<RoomItem, LinkedHashMap<ItemType, List<RoomDamage>>>> elementsFromXMLList;
    
        public CEL_ElementsFromXMLArrayAdapter(Context context, int resource,
                List<LinkedHashMap<RoomItem, LinkedHashMap<ItemType, List<RoomDamage>>>> elementsFromXMLList) {
            super(context, resource, elementsFromXMLList);
    
            this.context = context;
            this.resource = resource;
            this.elementsFromXMLList = elementsFromXMLList;
        }
    
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            final int positionItem = position;
            View view = convertView;
            View v = (View)LayoutInflater.from(context).inflate(your layout,parent, false);
            // this will make a list item from your layout then insert your data into it's child views
    
            return v;
    
        }
    
        @Override
        public int getCount() {
            return this.elementsFromXMLList.size();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多