为TwoWayView创建自定义适配器

时间:2016-05-07 18:41:04

标签: android custom-adapter

我需要制作水平列表视图,搜索后找到了一个解决方案,即TwoWayView。

互联网上的“textview”example可以找到我,但我需要一个ImageView项而不是TextView所以我创建了一个适配器:

public class Custom_Supermarket_Adapter_2 extends ArrayAdapter<Integer> {
private Context context;
private Integer[] imagelist;
private LayoutInflater mInflater;
private View view;
private DatabaseHandler dbhandler;
private ImageView imageview;
private int resource;
public Custom_Supermarket_Adapter_2(Context context, int resource, Integer[] objects) {
    super(context, resource, objects);
    this.context = context;
    this.imagelist = objects;
    this.resource = resource;
    mInflater = LayoutInflater.from(context);
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
      view = mInflater.inflate(resource, null);
    }else{
        view = convertView;
    }
    imageview = (ImageView)view.findViewById(R.id.customimageview);
    imageview.setImageResource(imagelist[position]);

    imageview.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.v("POSITION CLICKED",Integer.toString(position));
        }
    });

    return view;
}
}

我在课堂上这样称呼它:

/*These are the array of the image I want to be displayed*/
private Integer[] mThumbIds = {
        R.drawable.citimart,R.drawable.coopmart,R.drawable.lottemart,R.drawable.maximark,R.drawable.metro
};

Custom_Supermarket_Adapter_2 aItems = new Custom_Supermarket_Adapter_2(this,R.layout.simple_list_item, mThumbIds);
    TwoWayView lvTest = (TwoWayView) findViewById(R.id.lvItems);
    lvTest.setAdapter(aItems);

这是我的simple_list_item xml文件

 <ImageView     xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/customimageview"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical" />

这是包含水平列表视图的主要布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<org.lucasr.twowayview.TwoWayView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/lvItems"
    style="@style/TwoWayView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2"
    android:drawSelectorOnTop="false"
    tools:context=".Listing_items"
    android:background="@android:color/holo_purple"/>

<GridView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="10"
    android:id="@+id/gridView_main"
    android:stretchMode="columnWidth"
    android:numColumns="2"
    android:horizontalSpacing="1dp"
    android:verticalSpacing="1dp"/>
</LinearLayout>

当我运行应用程序时,我只看到空TwoWayView,没有显示图像,我试图点击TwoWayView里面的任何地方,logcat显示“POSITION CLICKED 0”,点击到处都是位置0看起来只处理了第一个图像但不知何故它无法渲染。我错过了一个循环或什么使它显示所有图像?我findviewbyID错了吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

我发现你的getView方法有问题。也许你尝试使用ViewHolder Pattern。此代码将与您的代码一起使用。

ViewHolder holder;

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
    convertView = mInflater.inflate(resource, null);
    holder = new ViewHolder(convertView);
    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}

holder.imageview.setImageResource(imagelist[position]);
holder.imageview.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.v("POSITION CLICKED",Integer.toString(position));
    }
});
return view;
}

public class ViewHolder {
    public ImageView imageview;

    public ViewHolder(View itemView) {
          imageview = (ImageView) itemView.findViewById(R.id.customimageview);
    }
}

答案 1 :(得分:0)

我忘了覆盖3种方法:

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

@Override
public long getItemId(int position) {
    return position;
}

@Override
public Integer getItem(int position) {
    return position;
}

他们开始出现所有项目。

对于&#34;空&#34;问题的一部分,这是因为我想要显示的图片具有不同的分辨率,我只是将它们全部调整为一个单一的分辨率,然后显示出来。

谢谢大家的光临。