【问题标题】:ExpandableListAdapter Imageview/TextviewExpandableListAdapter Imageview/Textview
【发布时间】:2020-04-17 10:44:38
【问题描述】:

大家早上好,

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

我正在尝试制作下图:

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

我尝试改编互联网教程,但没有成功。

我的问题是:当我点击父 ImageView 时,没有任何反应。

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:

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:

<?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

<?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>

谁能告诉我为什么它不起作用? 提前致谢!

【问题讨论】:

    标签: android expandablelistview


    【解决方案1】:

    请使用ExpandableListViewsetOnGroupClickListener 方法用于群组和
    对 Childs 使用 ExpandableListViewsetOnChildClickListener 方法,因此当您单击 imageview 时,它会显示其子项。

    你可以参考这个 kotlin 代码

    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
    }
    

    【讨论】:

    • 我不明白你的回答。请问可以开发吗?
    • 您的第一个图像视图是父图像视图,因此您应该编写该图像视图的单击事件,这就是我想告诉您的内容,让我写答案,这会给您带来想法
    • 此代码在 kotlin 中,但您可以从中获取参考
    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多