Custom ExpandableListView

Интерфейс, диалоги, темы, стили, меню
Ответить
we2seek
Сообщения: 1
Зарегистрирован: 10 сен 2014, 23:37

Custom ExpandableListView

Сообщение we2seek » 11 сен 2014, 00:00

Делаю свой раскрывающийся список. Вот что с ним не так, что при раскрытии групп названия групп перемешиваются (а содержимое - нет)?

Код: Выделить всё

public class ExpLstAdapter extends BaseExpandableListAdapter {

	private Context context;
	private ArrayList<Group> groups;

	public ExpLstAdapter(Context context, ArrayList<Group> groups) {
		super();
		this.context = context;
		this.groups = groups;
	}

	@Override
	public int getGroupCount() {
		return groups.size();
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		ArrayList<Child> chList = groups.get(groupPosition).getItems();
		return chList.size();
	}

	@Override
	public Object getGroup(int groupPosition) {
		return groups.get(groupPosition);
	}

	@Override
	public Object getChild(int groupPosition, int childPosition) {
		return groups.get(groupPosition).getItems().get(childPosition);
	}

	@Override
	public long getGroupId(int groupPosition) {
		// TODO
		return 0L;
	}

	@Override
	public long getChildId(int groupPosition, int childPosition) {
		// TODO
		return 0L;
	}

	@Override
	public boolean hasStableIds() {
		return false;
	}

	@Override
	public View getGroupView(int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {

		Group group = (Group) getGroup(groupPosition);
		if (convertView == null) {
			LayoutInflater inflater = (LayoutInflater) context
					.getSystemService(context.LAYOUT_INFLATER_SERVICE);
			convertView = inflater.inflate(R.layout.group_item, null);
			((TextView) convertView.findViewById(R.id.txtGroupName))
					.setText(group.getName());
			((TextView) convertView.findViewById(R.id.txtGroupCapacity))
					.setText(Integer.toString(groups.get(groupPosition)
							.getItems().size()));
		}
		return convertView;
	}

	@Override
	public View getChildView(final int groupPosition, final int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {
		final Child child = (Child) getChild(groupPosition, childPosition);
		if (convertView == null) {
			LayoutInflater infalInflater = (LayoutInflater) context
					.getSystemService(context.LAYOUT_INFLATER_SERVICE);
			convertView = infalInflater.inflate(R.layout.child_item, null);
		}

		TextView tv = (TextView) convertView.findViewById(R.id.txtName);
		tv.setText(child.getName());

		ImageView ivGender = (ImageView) convertView
				.findViewById(R.id.imageGender);
		if (child.isMale()) {
			ivGender.setImageResource(R.drawable.male);
		} else {
			ivGender.setImageResource(R.drawable.female);
		}
		ImageView ivCard = (ImageView) convertView.findViewById(R.id.imageCard);
		if (child.hasCard()) {
			ivCard.setImageResource(android.R.drawable.btn_star_big_on);
		} else {
			ivCard.setImageResource(android.R.drawable.btn_star_big_off);
		}

		convertView.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View view) {
				Toast.makeText(context, showGroup(groupPosition), Toast.LENGTH_SHORT)
						.show();
			}
		});

		return convertView;
	}

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		return true;
	}

	private String showGroups() {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < groups.size(); i++) {
			sb.append(groups.get(i).toString());
		}
		return sb.toString();
	}
	
	private String showGroup(int groupPosition){
		return groups.get(groupPosition).toString();
	}

}
Вложения
Список развернут
Список развернут
001-1.png (20.56 КБ) 1561 просмотр
Список свернут
Список свернут
000.png (16.63 КБ) 1561 просмотр

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Custom ExpandableListView

Сообщение klblk » 11 сен 2014, 07:45

думаю проблема в некорректном использовании convertView, хотя могу ошибаться, т.к. не знаю как ведет себя ExpandableList при раскрытии. Но если все группы не будут помещаться на экран при скролинге будут косяки точно в вашем случае.
Забавно что в getChildView у вас все нормально вроде бы. Хотя нет, OnClickListener надо бы за пределы функции вынести. Ну и ViewHolder можно прикрутить.

Ответить