发现问题
顾名思义,ExpandableListView拓展了ListView没有实现的功能,效果类似于QQ的好友列表。
xml文件
<ExpandableListView
android:id="@+id/search_diet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:cacheColorHint="#00000000"
android:listSelector="#00000000" >
</ExpandableListView>
activity文件
import *
public class SearchActivity extends BaseUiAuth {
private SearchView search;
private ExpandableListView listView;
private ArrayList<DietMeal> list;
private MealAdapter listAdapter;
DietMeal fooddish;
DietMeal foodmenu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
initToolbar("");
initView();
}
private void initView() {
listView = (ExpandableListView) findViewById(R.id.search_diet);
list = new ArrayList<DietMeal>();
fooddish = new DietMeal("食材");
foodmenu = new DietMeal("食谱");
list.add(fooddish);
list.add(foodmenu);
listAdapter = new MealAdapter(this, list);
listView.setAdapter(listAdapter);
listView.expandGroup(0);
listView.expandGroup(1);
listView.setVisibility(View.GONE);
listView.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView arg0, View arg1, int groupPosition, int childPosition,
long arg4) {
if (groupPosition == 0)
searchDish(listAdapter.getChild(groupPosition, childPosition).getName());
if (groupPosition == 1)
searchMenu(listAdapter.getChild(groupPosition, childPosition).getName());
return false;
}
});
}
}
adapter文件
import *
public class MealAdapter extends BaseExpandableListAdapter {
public ArrayList<DietMeal> group;
private LayoutInflater inflater;
public MealAdapter(Context context, ArrayList<DietMeal> group) {
inflater = LayoutInflater.from(context);
this.group = group;
}
@Override
public FoodMenu getChild(int groupPosition, int childPosition) {
return group.get(groupPosition).getChild(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public int getChildrenCount(int groupPosition) {
return group.get(groupPosition).getChildSize();
}
@Override
public Object getGroup(int groupPosition) {
return group.get(groupPosition);
}
@Override
public int getGroupCount() {
return group.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@SuppressLint("InflateParams")
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
DietMeal groupObject = (DietMeal) getGroup(groupPosition);
String groupname = groupObject.getGroup();
convertView = inflater.inflate(R.layout.item_meal_tag, null);
TextView tag = (TextView) convertView.findViewById(R.id.meal_tag);
tag.setText(groupname);
LinearLayout bg = (LinearLayout) convertView.findViewById(R.id.meal_bg);
if (group.get(groupPosition).group == "早餐")
bg.setBackgroundResource(R.drawable.breakfast);
if (group.get(groupPosition).group == "午餐")
bg.setBackgroundResource(R.drawable.lunch);
if (group.get(groupPosition).group == "晚餐")
bg.setBackgroundResource(R.drawable.dinner);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
FoodMenu food = (FoodMenu) getChild(groupPosition, childPosition);
convertView = inflater.inflate(R.layout.item_meal, null);
final ImageView icon = (ImageView) convertView.findViewById(R.id.meal_icon);
TextView body = (TextView) convertView.findViewById(R.id.meal_body);
TextView name = (TextView) convertView.findViewById(R.id.meal_name);
TextView introduce = (TextView) convertView.findViewById(R.id.meal_introduce);
introduce.setText(food.getEffect());
name.setText(food.getName());
if (!food.getBodyType().equals(""))
body.setText(food.getBodyType());
else
body.setVisibility(View.GONE);
if (!food.getImage().equals("")) {
// 判断本地是否存在
File f = new File(C.dir.foodImg + food.getImage().substring(5));
if (!f.exists()) {
// 加载图片
ImageRequest imageRequest = new ImageRequest(C.api.base + "/img" + food.getImage(),
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
icon.setImageBitmap(response);
}
}, 100, 100, Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
icon.setImageResource(R.drawable.image_fail);
}
});
mQueue.add(imageRequest);
} else {
icon.setImageBitmap(decodeSampledBitmapFromFile(C.dir.foodImg + food.getImage().substring(5), 80, 80));
}
}
return convertView;
}
}