Android BaseExpandableListAdapter listener w childView

Odpowiedz Nowy wątek
Mały Web
2016-01-26 11:11
Mały Web
0

Cześć,

mam klase rozszerzającą BaseExpandableListAdapter, i chciałbym z childa przejść na jakąś inną Acitivity. W child mam tam jeden TextView i jeden ImageView i w momencie kliknięcia na ImageView chciałbym pobrać dane i wkleić w nowym Activity. Problem jest taki, że pobiera mi złe dane tj. z innego childa. Oto kod:

(...)

@Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ViewHolder holder;
        Log.d(TAG, "Group pos: " + groupPosition + " Child pos: " + childPosition);
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.listview_child_row_layout, parent, false);
            holder = new ViewHolder();

            ImageView imageView = (ImageView) convertView.findViewById(R.id.show);
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Item item = (Item) getChild(groupPosition, childPosition);
                    Log.d(TAG, "Inner class - Group pos: " + groupPosition + " Child pos: " + childPosition);
                    DataHolderClass dataHolderClass = DataHolderClass.getInstance();
                    dataHolderClass.setDetailObject(item);
                    Intent intent = new Intent();
                    String fragment = "New";
                    intent.putExtra("Activity", fragment);
                    intent.setClass(context, NewAcitivity.class);
                    context.startActivity(intent);
                }
            });

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }

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

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

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

(...)

user image

Log pokazuje, że przy kliknięciu są nieprawidłowe (dla mnie) pozycje group i child. Niestety nie mam pomysłu na rozwiązanie tego. Z góry dzięki za odpowiedzi.

Pozostało 580 znaków

2016-01-26 11:43

Rejestracja: 4 lata temu

Ostatnio: 16 godzin temu

0

IMHO coś masz źle ale ciężko coś powiedzieć, jeżeli pokazałeś fragment kodu, który tak naprawdę nic nie mówi. Do BaseExpandableListAdapter powinieneś przekazać dwie kolekcje: listę grup oraz mapę która łączy grupy z elementami. Następnie w getChild powinieneś mieć coś takiego:

children.get(gropuList.get(groupPosition)).get(childPosition)

Wiedza to potęga
edytowany 1x, ostatnio: Haskell, 2016-01-26 11:52

Pozostało 580 znaków

Mały Web
2016-01-26 11:59
Mały Web
0

Do adaptera przekazuje:

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    public static final String TAG = ExpandableListAdapter.class.getSimpleName();

    private final LayoutInflater layoutInflater;
    private List<Item> groups;
    private List<List<Detail>> children;
    private Context context;
    int groupPosition;
    int childPosition;

    public ExpandableListAdapter(List<Header> groups, List<List<Detail>> children, Context context) {
        this.groups = groups;
        this.children = children;
        this.layoutInflater = LayoutInflater.from(context);
        this.context = context;
    }
(...)

Nie bardzo wiem czemu groupPosition i childPosition w onClick daje takie wyniki... Pierwsze wybory group i podpięde pod nie child działają dobrze. Wygląda jakby na czas życia zmienne były przypisane jeden raz. Z tym, że w inner class nie mogę używać non-final zmiennych.

Pozostało 580 znaków

Mały Web
2016-01-26 12:02
Mały Web
0

Membery:

int groupPosition;
int childPosition;

przez przypadek nie usunąłem. Tworzyłem sobie do testowania.

Pozostało 580 znaków

Mały Web
2016-01-26 14:37
Mały Web
0

Gdyby ktoś miał podobny problem to wytarczy przenieść listener z if'a

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0