ExpandableListAdapter Imageview/Textview [英] ExpandableListAdapter Imageview/Textview

查看:49
本文介绍了ExpandableListAdapter Imageview/Textview的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

早上好,

我正在尝试在应用程序中设置ExpandableListView.

I am trying to set up an ExpandableListView in my application.

我正在尝试绘制以下图表:

I am trying to make the diagram below:

我承认我很难做到这一点.

I admit I have difficulties in achieving this.

我试图改编互联网教程,但没有成功.

I tried to adapt the internet tutorials but without success.

我的问题是:当我单击父ImageView时,什么也没发生.

My problem is : when I click on a parent ImageView, nothing happens.

MainActivity.java

MainActivity.java

package com.evo.tab2escape;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ExpandableListView;


public class MainActivity extends Activity {

ExpandableListAdapter listAdapter;
ExpandableListView expListView;

public List<Integer> listDataHeader;
public HashMap<Integer, List<String>> listDataChild;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.jeux2);

    // get the listview
    expListView = (ExpandableListView) findViewById(R.id.ExpandableListView);

    // preparing list data
    prepareListData();

    listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

    // setting list adapter
    expListView.setAdapter(listAdapter);
}

/*
 * Preparing the list data
 */
private void prepareListData() {
    listDataHeader = new ArrayList<Integer>();
    // Adding group data
    listDataHeader.add(R.drawable.logo_1);
    listDataHeader.add(R.drawable.logo_2);
    listDataHeader.add(R.drawable.logo_3);


    // Adding child data
    List<String> logo1 = new ArrayList<>();
    logo1.add("TEST 1");

    List<String> logo2 = new ArrayList<>();
    logo2.add("TEST 2");

    List<String> logo3 = new ArrayList<>();
    logo3.add("TEST 3");



    //List<Integer> noel_niv = new ArrayList<Integer>();
    //noel_niv.add(R.drawable.divers_niv2_cadenas);


    //List<Integer> hacker_niv = new ArrayList<Integer>();
    //hacker_niv.add(R.drawable.divers_niv2_cadenas);


    listDataChild = new HashMap<Integer, List<String>>();

    listDataChild.put(listDataHeader.get(0), logo1);
    listDataChild.put(listDataHeader.get(1), logo2);
    listDataChild.put(listDataHeader.get(2), logo3);

}
}

ExpandableListAdapter.java:

ExpandableListAdapter.java :

package com.evo.tab2escape;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<Integer> _listDataHeader; // Images
// child data in format of header , child
private HashMap<Integer, List<String>> _listDataChild;

public ExpandableListAdapter(Context context, List<Integer> listDataHeader,
                             HashMap<Integer, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

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

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    String txt = (String) getChild(groupPosition, childPosition);


    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);
    }

    TextView explications = (TextView) convertView.findViewById(R.id.explications);
    ImageView niveau = (ImageView) convertView.findViewById(R.id.niveau);


    if (txt.equals("TEST1"))
    {
        niveau.setImageResource(R.drawable.niv1);
        explications.setText("blablabalbabla 1");
    }
    if (txt.equals("TEST1"))
    {
        niveau.setImageResource(R.drawable.niv2);
        explications.setText("blablabalbabla 2");
    }
    if (txt.equals("TEST1"))
    {
        niveau.setImageResource(R.drawable.niv3);
        explications.setText("blablabalbabla 3");
    }



    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .size();
}

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

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

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

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent)
{
    if (convertView == null)
    {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group, null);
    }

    ImageView logo = (ImageView) convertView.findViewById(R.id.logo);
    int imageId = this._listDataHeader.get(groupPosition);
    logo.setImageResource(imageId);

    return convertView;
}

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

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

Main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fond_main">
<TextView
    android:id="@+id/histo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="\nVoir l'historique des parties     \n"
    android:gravity="bottom"
    android:layout_gravity="right"
    android:textStyle="bold">
</TextView>
<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#f3f3f3"/>
<ExpandableListView
    android:id="@+id/ExpandableListView"
    android:layout_height="match_parent"
    android:layout_width="match_parent">
</ExpandableListView>
</LinearLayout>

list_group.xml:

list_group.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Space
    android:layout_width="match_parent"
    android:layout_height="20dp">
</Space>
<ImageView
    android:id="@+id/logo"
    android:layout_width="match_parent"
    android:scaleType="fitXY"
    android:layout_height="100dp"/>
</LinearLayout>

list_item.xml

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="horizontal"
    android:id="@+id/divers">
    <TextView
        android:id="@+id/explications"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_weight="1">
    </TextView>
    <ImageView
        android:id="@+id/niveau"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_weight="3">
    </ImageView>
</LinearLayout>
</LinearLayout>

有人可以告诉我为什么它不起作用吗?预先感谢!

Can someone tell me why it doesn't work? Thanks in advance !

推荐答案

请对组和
使用 ExpandableListView setOnGroupClickListener 方法对Childs使用 ExpandableListView setOnChildClickListener 方法,以便在单击imageview时显示其子级.

Please use setOnGroupClickListener method of ExpandableListView for Groups and
use setOnChildClickListener method of ExpandableListView for Childs so when you will click on imageview it shows its child.

您可以参考此Kotlin代码

You can get refference with this kotlin code

private var previousGroupPosition : Int = -1
 expListView.setOnGroupClickListener { parent, _, groupPosition, _ ->
            parent.smoothScrollToPosition(groupPosition)
            if(expListView.isGroupExpanded(groupPosition)){
                expListView.collapseGroup(groupPosition)
                previousGroupPosition = -1
            }else{
                expListView.expandGroup(groupPosition)
                if(previousGroupPosition!=-1){
                    expListView.collapseGroup(previousGroupPosition)
                }
                previousGroupPosition=groupPosition
            }
            true
        }


expListView.setOnChildClickListener { _, _, groupPosition, childPosition, _ ->

            when (groupPosition) {
                when(childPosition){
                  //place your code according to child position
                }
         }
        false
}

这篇关于ExpandableListAdapter Imageview/Textview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆