2013-02-14 12 views
5

Używam expandablelistview. Czy mimo to mogę rozwinąć wiersz grupy po kliknięciu obrazu wewnątrz? Wiem, że aby obraz reagował na kliknięcie, muszę ustawić jego ostrość. Teraz, gdy ten obraz reaguje na kliknięcie (w moim adapterze custome), w jaki sposób mogę programowo powiększyć/zwinąć ten konkretny wiersz grupy, do którego należy?Rozszerzanie wiersza grupy programowo w rozwijanej liście

Dziękuję

Odpowiedz

11

adapter

private OnItemSelectedListener onItemSelectedCallback; 

public interface OnItemsSelectedListener { 
    public void onImageSelected(int groupPos); 
} 

public YourAdapter(Context context) { 
    try { 
     this.onItemSelectedCallback = (OnItemSelectedListener) context; 
    } 
    catch (ClassCastException e) { 
     throw new ClassCastException(context.toString() + " must implement OnItemSelectedListener "); 
    } 
} 

Dodaj ten w getView()

ImageView imageView = new ImageView(); 
imageView.setTag(R.id.tagGroupPosition, groupPosition); 
imageView.setOnClickListener(onClickListener); 

Dodaj ten w OnClickListener

OnClickListener onClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     int groupPos = ((ImageView) v).getTagId(R.id.tagGroupPosition); 
     onItemSelectedCallback.onImageSelected(groupPos); 
    } 
} 

Następnie aktywności trzeba narzędzi Siema urAdapter.OnItemsSelectedListener Override onImageSelected

@Override 
public void onImageSelected(int groupPos){ 
    if(expandableList.isGroupExpanded(groupPos)){ 
     expandableList.collapseGroup(groupPos); 
    }else{ 
     expandableList.expandGroup(groupPos); 
    } 
} 
+0

Gdzie jest załamanie/rozwiń odpowiedź, która jest przyczyną mojego pytania? – Snake

+0

Mam dodać więcej kodu, aby wyjaśnić moją odpowiedź, proszę zobaczyć. Mam nadzieję, że to może ci pomóc. – Pongpat

+0

Dziękuję za odpowiedź. Przyjęty – Snake

2

prostszy sposób:

  1. przekazać referencję do ExpandableListView w konstruktora adaptera;
  2. w getGroupView dodać OnClickListener przycisk trzeba i wystarczy zadzwonić listView.expandGroup(position);

Przykład:

public class YourAdapter extends BaseExpandableListAdapter { 

private ExpandableListView listView; 

public ReportsAdapter(ExpandableListView listView) { 
    this.listView = listView; 
} 

//... 

@Override 
public View getGroupView(final int position, boolean isExpanded, View convertView, ViewGroup parent) { 
    ParentViewHolder holder; 

    if (convertView == null) { 
     convertView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.your_item, parent, false); 

     holder = new ParentViewHolder(); 

     //... holder logic 


     holder.btnExpand = convertView.findViewById(R.id.btn_expand); 

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

    //..holder logic 

    holder.btnExpand.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      listView.expandGroup(position); 
     } 
    }); 

    return convertView; 
} 

W swojej działalności onCreate() lub fragment onCreateView() mieć

ExpandableListView listView = (ExpandableListView) view.findViewById(R.id.expandable_list_view); 
    mAdapter = new YourAdapter(listView); 
    listView.setAdapter(mAdapter); 
Powiązane problemy