ExpandableListAdapter Imageview/Textview [英] 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屋!