未显示自定义列表视图,并且未调用getView

时间:2015-10-24 20:29:49

标签: android android-listview android-arrayadapter

我的问题是我的列表视图没有显示,而getView方法从未被调用

这是onCreate

MainActivity内的列表视图
l = (ListView) findViewById(R.id.listvv);
        CustomAdapter adapter = new CustomAdapter(MainActivity.this, maainimg);

        l.setAdapter(adapter);

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white"
    tools:context=".MainActivity">

   <ListView
       android:id="@+id/listvv"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:divider="#b4be"
       android:dividerHeight="2dp"></ListView>

    <LinearLayout
        android:id="@+id/ad_holder"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center|bottom"

        android:layout_alignParentBottom="true">

        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_marginLeft="50dp"
            android:layout_marginRight="50dp"
            ads:adSize="BANNER"
            ads:adUnitId="@string/BottomBanner">
        </com.google.android.gms.ads.AdView>
    </LinearLayout>






</LinearLayout>

这是CustomAdapter

中的MainActivity
   public class CustomAdapter extends ArrayAdapter<String> {
        int[] img;
        Activity activity;
        ImageButton imageButton;
        public CustomAdapter(Activity act, int [] images) {
            super(act, R.layout.custom_row);
            this.activity=act;
            this.img=images;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Log.d("getView","Called!");

            View row = convertView;
            if(row==null){
                LayoutInflater inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = inflater.inflate(R.layout.custom_row, parent, false);

                imageButton   = (ImageButton) row.findViewById(R.id.preview);}

            imageButton.setImageResource(img[position]);
            Log.d("added",position+"");
            if (getSelectedcolor() == 0) {
                imageButton.setColorFilter(Color.RED);
                setSelectedcolor(Color.RED);

            } else {
                imageButton.setColorFilter(Color.parseColor(colorToHexString(getSelectedcolor())));

            }

            return row;
        }
    }

custom_row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background">
    <ImageButton
        android:id="@+id/preview"
        android:layout_width="80dp"
        android:layout_height="80dp"
          android:layout_marginLeft="20dp"
       android:layout_marginTop="10dp"
        android:src="@drawable/ic_1_red"
        android:scaleType="fitXY"
        android:background="@drawable/roundedbutton"

        />

</LinearLayout>

更新 这是我的阵列maainimg它不是空的

 maainimg = new int[]{R.drawable.ic_1_red,R.drawable.ic_2_red,R.drawable.ic_3_red,R.drawable.ic_4_red,R.drawable.ic_5_red,R.drawable.ic_6_red,
                R.drawable.ic_7,R.drawable.ic_8,R.drawable.ic_8,R.drawable.ic_9,R.drawable.ic_10,R.drawable.ic_11,R.drawable.ic_12
                ,R.drawable.ic_13,R.drawable.ic_14,R.drawable.ic_15,R.drawable.ic_16,R.drawable.ic_17,R.drawable.ic_18,R.drawable.ic_19,R.drawable.ic_20,
                R.drawable.ic_21,R.drawable.ic_22,R.drawable.ic_23,R.drawable.ic_24,R.drawable.ic_25};

3 个答案:

答案 0 :(得分:1)

我看到的第一个问题是你的布局。

   <ListView
       android:id="@+id/listvv"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:divider="#b4be"
       android:dividerHeight="2dp"></ListView>

    <LinearLayout
        android:id="@+id/ad_holder"
        android:layout_width="fill_parent"

您的ListView没有剩余空间,因为底部线性布局使用FILL_PARENT已弃用btw,请使用MATCH_PARENT代替)。

尝试将ListView高度(和宽度)设为MATCH_PARENT。然后处理&#34; Ad&#34;。

您可以将LinearLayout替换为RelativeLayout,并在其父级底部和列表视图下方放置广告针脚。

第二:如果您在内部使用ArrayAdapter<String>数组,为什么使用int

第三:既然你正在使用错误类型的适配器,那么你没有正确实现它,你需要覆盖更多的方法(例如getCount()) ,告诉底层适配器:嘿,这是我们拥有的项目数量。

由于您没有使用提供的字符串数组,而是您在构造期间传递的自定义int数组,请尝试重写getCount()并返回int数组的大小。

答案 1 :(得分:1)

我在你的Adapter类中存在一个问题,试试这个,但请记住,有更简洁的方法来编写相同的代码,

public class CustomAdapter extends ArrayAdapter<Integer> {
        int[] img;
        Context context;
        ImageButton imageButton;
        public CustomAdapter(Context context, Integer [] images) {
            super(context, R.layout.custom_row, images);
            this.context=context;
            this.img=images;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Log.d("getView","Called!");

            View row = convertView;
            if(row==null){
                LayoutInflater inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = inflater.inflate(R.layout.custom_row, parent, false);

            }

            imageButton   = (ImageButton) row.findViewById(R.id.preview);
            imageButton.setImageResource(img[position]);
            Log.d("added",position+"");
            if (getSelectedcolor() == 0) {
                imageButton.setColorFilter(Color.RED);
                setSelectedcolor(Color.RED);

            } else {
                imageButton.setColorFilter(Color.parseColor(colorToHexString(getSelectedcolor())));

            }

            return row;
        }
    }

答案 2 :(得分:1)

当你调用super(act, R.layout.custom_row);(没有传递对象)时,你需要覆盖getCount()方法,否则你的适配器无法弄清楚你有多少项,这就是为什么没有调用getView()方法。

@Override
public int getCount(){
   return img.length;
}