0

ビュー ホルダーを使用して (シンプルなカーソル アダプターを使用して) リスト ビューでビューを渡すために、カテゴリで分割された 1 つのリストを作成しています。したがって、カスタムの単純なカーソル アダプターでは、リストの各項目に 1 つのバーの可視性を設定できます。ただし、スクロールすると、そのバーの可視性はリスト項目に対して固定されておらず、上下にランダムに変更されます。ここに投稿しているコードを確認してください。

通常のアクティビティからカスタム カーソル リスト アダプターのコンストラクターを呼び出すと、すべてのパラメーター (ビュー、カーソル) を渡すだけで、新しいビューではなくバインド ビューのみに乗っています。

これについて私を助けてください。

アクティビティは次のとおりです。

 catCount = cursorCat.getCount();
int i=0;
cursorCat.moveToFirst();
do {
categ  =  cursorCat.getString(cursorCat.getColumnIndex("category_Name")); 
cursorCatItems = db.rawQuery("SELECT _id, product_code, product_name, product_category, in_stock, price FROM ProductDetails WHERE _id || ' ' || product_name || product_code LIKE ? ",
new String[] { "%" +searchValue+ "%"});

adapter = new MforceAdapterCat(this, R.layout.item_details,
cursorCatItems, new String[] { "product_code", "product_name","product_category","in_stock","price" }, new int[] {
R.id.tvCode, R.id.tvItemName,R.id.tvItemType,R.id.tvQuantity,R.id.tvPrice });

listView.setAdapter(adapter);

i++;
} while (cursorCat.moveToNext() && i<catCount-1);              

cursorCat.close();

// down here is the code for list view items

      @SuppressLint("NewApi")
      public class MforceAdapterCat extends SimpleCursorAdapter {
        String prevCat="";
    int count=0;
    private final String TAG = this.getClass().getSimpleName();

    protected ListAdapter adapter;

    public MforceAdapterCat(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
        // TODO Auto-generated constructor stub
    }


@SuppressWarnings("deprecation")
public MforceAdapterCat(Context context, int layout, Cursor c,
        String[] from, int[] to) {
    super(context, layout, c, from, to);
    // TODO Auto-generated constructor stub
}


@Override
public int getItemViewType(int position) {
    // TODO Auto-generated method stub
    return super.getItemViewType(position);
}


   @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);

        ViewHolder holder = (ViewHolder) view.getTag();

        holder = new ViewHolder();

            holder.tvCode = (TextView) view.findViewById(R.id.tvCode);
            holder.tvItemName = (TextView) view.findViewById(R.id.tvItemName);
            holder.tvItemType = (TextView) view.findViewById(R.id.tvItemType);
            holder.tvPrice = (TextView) view.findViewById(R.id.tvPrice);
            holder.tvQuantity = (TextView) view.findViewById(R.id.tvQuantity);
            holder.imgBtnLv=(ImageButton) view.findViewById(R.id.imgBtnLv);
            holder.categBar=(LinearLayout) view.findViewById(R.id.categBar);
            holder.tvTitleCateg=(TextView) view.findViewById(R.id.tvTitleCateg);

            holder.item_detail_layout=(RelativeLayout) view.findViewById(R.id.item_detail_layout);


            String currCategory =   cursor.getString(cursor.getColumnIndex("product_category"));

         holder.tvTitleCateg.setText(currCategory);

         if(prevCat.equalsIgnoreCase(currCategory)){


             holder.categBar.setVisibility(View.GONE);


         }else{

                    holder.categBar.setVisibility(View.VISIBLE);

         }

         prevCat= currCategory;

         OnClickListener mOnImagebtnClickListener = new OnClickListener() {
                @Override
                public void onClick(View v) {
                    final int position = ProductsActivity.listView.getPositionForView((View) v.getParent());
                    Log.v(TAG, "Image button in list clicked, row ="+position);

                    ListAdapter la=     ProductsActivity.listView.getAdapter();
                       System.out.println("list adapter from get is ="+la);

                    int cnt =     getPositionFromRowId(la, position, 0, la.getCount());

                     System.out.println("info from new mthod ="+cnt);

                }
            };

            holder.imgBtnLv.setOnClickListener(mOnImagebtnClickListener);

            view.setTag(holder);


    }

    static class ViewHolder {
        TextView tvCode;
        TextView tvItemName,tvItemType,tvPrice,tvQuantity;
         RelativeLayout item_detail_layout;
         ImageButton imgBtnLv;
         LinearLayout categBar;
         TextView tvTitleCateg;
    }
4

1 に答える 1

0

ViewHolderの使用方法は意味がありません。役に立たない私見です。ここを参照してください: http ://www.jmanzano.es/blog/?p = 166

ここではビューを膨らませていないので、必要ありません。ViewHolderを使用して、冗長なビューの膨張を削除し、ビューを再利用する必要がありますが、カーソルアダプタではビューの再利用はすでに行われています。だからあなたはそれを削除することができます。

于 2013-02-07T06:49:06.647 に答える