5

私はブラジル人なので、私の英語は上手ではありません。

だから.. view.getTag() メソッドを介してオブジェクトタグを取得するには、expandablelistview でグループのビューを取得する必要があります。

この例に従ってください:

 ExpandableListView

    --> group (i need this view)
    ----> child
    ----> child
    ----> child

    --> group (i need this view)
    ----> child
    ----> child

私のコード:

    @Override
public boolean onChildClick(final ExpandableListView parent, final View v,
        final int groupPosition, final int childPosition, final long id) {

        /* I NEED GET VIEW OF GROUP FOR GET YOUR TAG*/

        View vParent = parent.getChildAt(groupPosition); // dont work after first group 
        Programa v2 = (Programa) parent.getTag(); // return null

        // v parameter is a child of group

    return true;
}

私のアダプターで:

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

    TwoLineListItem view = (TwoLineListItem) LayoutInflater.from(contexto)
            .inflate(android.R.layout.simple_expandable_list_item_2,
                    parent, false);

    String programa = map.keySet().toArray(new String[map.keySet().size()])[groupPosition];

    view.getText1().setText(programa);
    view.getText2().setText("PROGRAMA LOCAL");

    view.setTag(programas.get(groupPosition)); // i need get this in child click listener

    return convertView = view;
}

何か案が?ありがとう

4

4 に答える 4

13

ExpandableListView からグループ ビューを取得するには、次のようにします。

public View getGroupView(ExpandableListView listView, int groupPosition) {
  long packedPosition = ExpandableListView.getPackedPositionForGroup(groupPosition);
  int flatPosition = listView.getFlatListPosition(packedPosition);
  int first = listView.getFirstVisiblePosition();
  return listView.getChildAt(flatPosition - first);
}
于 2015-05-06T21:28:46.040 に答える
1

AedonEtLIRA の回答を試してみましたが、リストの最初の項目しか取得できませんでした。

私の解決策は、アダプターの getGroupView メソッドにタグを設定することでした。

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

    if (convertView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.listitem_group, null);
    }

    //This is your data object that you might be using for storage that can be returned by your getGroup(groupPosition) function
    GroupDataDto groupDataDto = (GroupDataDto) getGroup(groupPosition);
    String name = groupDataDto.getName();
    convertView.setTag(name);
...

Fragment / Activity の onGroupExpand と onGroupCollapse で:

    GroupDataDto groupDataDto = (GroupDataDto) listAdapter.getGroup(groupPosition);
    ImageView arrow = (ImageView) getView().findViewWithTag(groupDataDto.getName()).findViewById(R.id.expandable_arrow_down);

次に、矢印でアニメーションを実行できます。これが、そのグループ ビューを取得したかった理由です。

于 2017-01-19T13:46:14.087 に答える
1

あなたのコードが正しければ、getTag() を呼び出すことができるように、子のグループ ビューを取得する必要がありますよね?

もしそうなら、そのステップをスキップして、programas.get(groupPosition)手動で設定されたタグの値にアクセスしてみませんか?

これを行うには、次のように呼び出します。

programas.get(groupPosition)onChildClickグループの位置の値もそこにあるので、メソッドの一番上にあります。

コメントに応じて編集します。

ここでの問題は、リスト内のビューのリサイクルのためにビューを再作成する必要があるため、アダプターを介してグループのビューを取得できないことです。この方法が機能しない場合は、コードを変更して機能させることを強くお勧めします。

がアダプタへの入力の 1 つである場合programasは、アダプタを呼び出しgetGroup(groupPosition)てアクセスします。それ以外の場合は、アダプター クラスで public メソッドを作成して、その値を取得できるようにします。

于 2013-10-01T19:45:52.637 に答える
-2

さて、次のコードを使用して、グループ内の TextView にアクセスしました。

@Override
public boolean onChildClick(final ExpandableListView parent, final View v,
    final int groupPosition, final int childPosition, final long id) {

    View vParent = mAdapter.getGroupView(groupPosition, true, null, null); 
    Programa v2 = (Programa) vParent.getTag(); 

return true;

}

役立つことを願っています

于 2014-12-31T17:14:35.110 に答える