0

私の主な目的は、リストビュー内にいくつかのボタンを作成し、いくつかの画像の状態を変更することです (リストビュー項目内も)。そこで、このコードを作成して、次のようなカスタム アダプターを作成しました。

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 を作成していることに言及する必要があります。

4

1 に答える 1

0

問題はmCategoriesListにあったようです..アクティビティでアダプターを設定するときにnullでした。その後、初期化していたため、グリッドビューセルレイアウトの静的コンテンツのみが表示されました(2つのボタンと2つの変更不可能な画像) )。

于 2013-04-17T07:41:27.717 に答える