私が取り組んでいる小さな「検索」の実装があります。listView は、クエリに一致する場合にアイテムを表示します。これは正常に機能しますが、メニューが非表示になり、再表示され、新しいクエリが作成されるたびに、すべての「検索可能」が積み重なっていきます。表示する必要があるものが 4 つある場合、最初に 4 が表示され、次に 8、次に 12 などが表示されます。
private class Adapter extends BaseAdapter {
private LayoutInflater inflater;
public Adapter(){
inflater = LayoutInflater.from(getContext());
}
@Override
public int getCount() {
return menuItems.size();
}
@Override
public Object getItem(int position) {
return menuItems.get(position).text;
}
@Override
public long getItemId(int position) {
return menuItems.get(position).id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder = new ViewHolder();
if (!isSearching) {
convertView = inflater.inflate(R.layout.rbm_item, null);
} else {
convertView = inflater.inflate(R.layout.rbm_search_item, null);
}
holder.subMenuList = (LinearLayout) convertView.findViewById(R.id.sub_holder);
holder.text = (TextView) convertView.findViewById(R.id.rbm_item_text);
convertView.setTag(holder);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (holder.subMenuList.getVisibility() == View.VISIBLE) {
holder.subMenuList.setVisibility(View.GONE);
} else {
holder.subMenuList.setVisibility(View.VISIBLE);
}
}
});
if (isSearching) {
holder.image = (ImageView) convertView.findViewById(R.id.rbm_item_icon);
holder.image.setImageResource(menuItems.get(position).icon);
holder.chapterId = (TextView) convertView.findViewById(R.id.id_text);
holder.chapterId.setText("Ch"+Integer.toString(menuItems.get(position).id));
} else {
holder.chapterId = (TextView) convertView.findViewById(R.id.rbm_item_id);
holder.chapterId.setText(Integer.toString(menuItems.get(position).id));
}
holder.text.setText(menuItems.get(position).text);
if (!isSearching) {
for (int i=0;i<menuItems.get(position).subItems.size();i++) {
TextView tv = new TextView(ctx);
tv.setTextColor(0xFF893658);
tv.setText(menuItems.get(position).subItems.get(i).getTitle());
tv.setCompoundDrawablesWithIntrinsicBounds(menuItems.get(position).subItems.get(i).getIcon(), 0, 0, 0);
tv.setCompoundDrawablePadding(5);
if (i == 0) {
if (menuItems.get(position).subItems.size() == 1) {
tv.setPadding(20, 20, 0, 20);
} else{
tv.setPadding(20, 20, 0, 10);
}
} else if (i == menuItems.get(position).subItems.size()-1){
tv.setPadding(20, 10, 0, 20);
} else {
tv.setPadding(20, 10, 0, 10);
}
holder.subMenuList.addView(tv);
}
}
return convertView;
}
class ViewHolder {
TextView text;
ImageView image;
LinearLayout subMenuList;
TextView chapterId;
}
}