私の主な目的は、リストビュー内にいくつかのボタンを作成し、いくつかの画像の状態を変更することです (リストビュー項目内も)。そこで、このコードを作成して、次のようなカスタム アダプターを作成しました。
public class CategoriesGridViewAdapter extends BaseAdapter {
private Activity context;
private List<CategoryHolder> mCategoriesList = new ArrayList<CategoryHolder>();
private CategoryHolder mCategoryHolder;
// @SuppressLint("UseSparseArrays")
// private Map<Integer, Boolean> favVisibilitiesMap = new HashMap<Integer,
// Boolean>();
// @SuppressLint("UseSparseArrays")
// private Map<Integer, Boolean> cartVisibilitiesMap = new HashMap<Integer,
// Boolean>();
private ViewHolder holder = null;
private int[] mTestingImagesForCategories = new int[] { R.drawable.pic1,
R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5
};
public CategoriesGridViewAdapter(Activity activity,
List<CategoryHolder> categoriesList) {
this.context = activity;
this.mCategoriesList = categoriesList;
}
@Override
public int getCount() {
return mCategoriesList.size();
}
@Override
public Object getItem(int pos) {
return mCategoriesList.get(pos);
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
mCategoryHolder = mCategoriesList.get(pos);
if (convertView == null) {
convertView = context.getLayoutInflater().inflate(
R.layout.cell_categories_gridview, parent, false);
holder = new ViewHolder(convertView);
holder.btn_cell_categoryAddCart
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int getPosition = (Integer) v.getTag();
CategoryHolder localCategoryHolder = mCategoriesList
.get(getPosition);
localCategoryHolder.setCartVisible(!mCategoriesList
.get(getPosition).isCartVisible());
holder.iv_cell_categoryCart
.setVisibility(setImageVisibility(localCategoryHolder
.isCartVisible()));
}
});
holder.btn_cell_categoryAddFav
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int getPosition = (Integer) v.getTag();
CategoryHolder localCategoryHolder = mCategoriesList
.get(getPosition);
localCategoryHolder.setFavVisible(!mCategoriesList
.get(getPosition).isFavVisible());
holder.iv_cell_categoryFav
.setVisibility(setImageVisibility(localCategoryHolder
.isFavVisible()));
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.btn_cell_categoryAddCart.setTag(pos);
holder.btn_cell_categoryAddFav.setTag(pos);
holder.iv_cell_categoryCart
.setVisibility(setImageVisibility(mCategoryHolder
.isCartVisible()));
holder.iv_cell_categoryFav
.setVisibility(setImageVisibility(mCategoryHolder
.isFavVisible()));
// just for testing, the final images will be some bitmaps downloaded from a server
holder.iv_cell_categoryContent
.setBackgroundResource(mTestingImagesForCategories[pos]);
return convertView;
}
private int setImageVisibility(boolean isVisible) {
return (isVisible) ? View.VISIBLE : View.INVISIBLE;
}
static class ViewHolder {
public ImageView iv_cell_categoryCart;
public ImageView iv_cell_categoryFav;
public ImageView iv_cell_categoryContent;
public Button btn_cell_categoryAddFav;
public Button btn_cell_categoryAddCart;
public ViewHolder(View convertView) {
iv_cell_categoryContent = (ImageView) convertView
.findViewById(R.id.iv_cell_category_image);
iv_cell_categoryCart = (ImageView) convertView
.findViewById(R.id.iv_cell_category_cart);
iv_cell_categoryFav = (ImageView) convertView
.findViewById(R.id.iv_cell_category_fav);
btn_cell_categoryAddFav = (Button) convertView
.findViewById(R.id.btn_cell_category_add_fav);
btn_cell_categoryAddCart = (Button) convertView
.findViewById(R.id.btn_cell_category_add_cart);
}
}
}
自分のコードのどこが悪いのかわからない?!
私はこのアダプターを持っていますが、これをデバッグし、すべて正常に動作しています (レイアウト内に配置した画像のブール値の状態を変更します)。
1.
- 画像(holder.iv_cell_categoryCart、holder.iv_cell_categoryFav)を表示/非表示にしません。問題は何でしょうか?(各setOnClickListenerでnotifyDataSetChangedを使用して問題を解決しました..ええ、知っています..愚かな私)
2.
- これらの静的イメージ (mTestingImagesForCategories -- R.drawable.pic1、R.drawable.pic2、R.drawable.pic3、R.drawable.pic4、R.drawable.pic5) は表示されません。
この GridView のレイアウトは次のようになります。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/iv_cell_category_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/lay_cell_category_content"
android:layout_below="@+id/lay_cell_category_header"
android:background="@drawable/ic_launcher"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:scaleType="fitXY" />
<RelativeLayout
android:id="@+id/lay_cell_category_header"
android:layout_width="fill_parent"
android:layout_height="@dimen/activity_categories_gridview_cornerimage_height"
android:layout_alignParentTop="true" >
<ImageView
android:id="@+id/iv_cell_category_fav"
android:layout_width="@dimen/activity_categories_gridview_cornerimage_width"
android:layout_height="fill_parent"
android:layout_above="@+id/lay_cell_category_content"
android:layout_alignParentLeft="true"
android:background="@drawable/carti" />
<ImageView
android:id="@+id/iv_cell_category_cart"
android:layout_width="@dimen/activity_categories_gridview_cornerimage_width"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:background="@drawable/star" />
</RelativeLayout>
<LinearLayout
android:id="@+id/lay_cell_category_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_cell_category_add_cart"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Add Cart"
android:textSize="12sp" />
<Button
android:id="@+id/btn_cell_category_add_fav"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Add Fav"
android:textSize="12sp" />
</LinearLayout>
このレイアウトのアイデアは、レイアウトの上部の左右にある 2 つの小さな画像を表示/非表示にする 2 つの下部ボタンを使用して、画像のメイン コンテンツをレイアウトすることです。(ユーザーが [お気に入りを追加] を押すと、星で構成される右上の画像が表示されます。もう一度押すと、画像が非表示になり、お気に入りへの製品の追加/削除をシミュレートします)。どんな助けでも大歓迎です!
LE: Fragment (ViewPager で使用) 内でプログラムによって GridView を作成していることに言及する必要があります。