ビュー ホルダーを使用して (シンプルなカーソル アダプターを使用して) リスト ビューでビューを渡すために、カテゴリで分割された 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;
}