Android ExpandableListView-选择元素
我正在尝试创建一个带有可选元素(子元素)的ExpandableListView,以便在关闭组或滚动所选元素后,这些选择不会消失。 我还没有找到任何本机解决方案,因此我尝试将元素的选定状态保存在单独的列表中,并在onChildClickListner中更改元素的状态和颜色。问题是-我无法让Listner工作。它就是进不去。但是,我可以分别为每个孩子设置一个列表。这确实有效,但并不能解决我的问题,因为在这种情况下,我得不到任何关于孩子在小组中的位置的信息。 这可能只是一个小错误。。代码如下: p、 有些变量名是德语的,很抱歉=) p、 另外,如果有任何提示,我将不胜感激Android ExpandableListView-选择元素,android,expandablelistview,Android,Expandablelistview,我正在尝试创建一个带有可选元素(子元素)的ExpandableListView,以便在关闭组或滚动所选元素后,这些选择不会消失。 我还没有找到任何本机解决方案,因此我尝试将元素的选定状态保存在单独的列表中,并在onChildClickListner中更改元素的状态和颜色。问题是-我无法让Listner工作。它就是进不去。但是,我可以分别为每个孩子设置一个列表。这确实有效,但并不能解决我的问题,因为在这种情况下,我得不到任何关于孩子在小组中的位置的信息。 这可能只是一个小错误。。代码如下: p、
package com.example.android.apis;
import java.util.ArrayList;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.ExpandableListView.OnChildClickListener;
public class ApiDemos extends ExpandableListActivity {
// This one works just fine if i set it for each child
private View.OnClickListener cl1 = new View.OnClickListener() {
public void onClick(View v) {
if (((TextView) v).isSelected() == false) {
((TextView) v).setSelected(true);
((TextView) v).setTextColor(RED);
} else {
((TextView) v).setSelected(false);
((TextView) v).setTextColor(WHITE);
}
}
};
// each child has a relation with one of these:
class veranstaltungView {
public String text;
public boolean marked;
public veranstaltungView(String txt) {
text = txt;
marked = false;
}
}
// This one is set on the whole ExpandableListView. It just doesnt get
// inside!
private OnChildClickListener cl = new OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
if (((TextView) v).isSelected() == false) {
veranstaltungenList.get(groupPosition).get(childPosition).marked = true;
((TextView) v).setSelected(true);
((TextView) v).setTextColor(RED);
} else {
veranstaltungenList.get(groupPosition).get(childPosition).marked = false;
((TextView) v).setSelected(false);
((TextView) v).setTextColor(WHITE);
}
return false;
}
};
private static final int WHITE = 0xffffffff;
private static final int RED = 0xffbc0000;
ExpandableListAdapter mAdapter;
private ArrayList<ArrayList<veranstaltungView>> veranstaltungenList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// generate some elements
veranstaltungenList = new ArrayList<ArrayList<veranstaltungView>>();
for (int i = 0; i < 6; i++) {
ArrayList<veranstaltungView> semester = new ArrayList<veranstaltungView>();
for (int j = 0; j < 3; j++) {
semester.add(new veranstaltungView("Veranstaltung " + i + "."
+ j));
}
veranstaltungenList.add(semester);
}
// Create and set the adapter
ExpandableListView elv = getExpandableListView();
mAdapter = new MyExpandableListAdapter();
setListAdapter(mAdapter);
elv.setItemsCanFocus(false);
elv.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE);
elv.setOnChildClickListener(cl);
}
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
// The groups
private String[] semesterArray = { "SEMESTER1", "SEMESTER2",
"SEMESTER3", "SEMESTER4", "SEMESTER5", "SEMESTER6" };
public Object getChild(int groupPosition, int childPosition) {
return veranstaltungenList.get(groupPosition).get(childPosition).text;
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return veranstaltungenList.get(groupPosition).size();
}
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 64);
TextView textView = new TextView(ApiDemos.this);
textView.setTextColor(WHITE);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
return textView;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = null;
textView = getGenericView();
textView.setText((String) getChild(groupPosition, childPosition));
textView.setClickable(true);
textView.setSelected(veranstaltungenList.get(groupPosition).get(
childPosition).marked);
if (veranstaltungenList.get(groupPosition).get(childPosition).marked == true)
textView.setTextColor(RED);
else
textView.setTextColor(WHITE);
// textView.setOnClickListener(cl1);
return textView;
}
public Object getGroup(int groupPosition) {
return semesterArray[groupPosition];
}
public int getGroupCount() {
return veranstaltungenList.size();
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}
}
package com.example.android.api;
导入java.util.ArrayList;
导入android.app.ExpandableListActivity;
导入android.os.Bundle;
导入android.view.Gravity;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AbsListView;
导入android.widget.BaseExpandableListAdapter;
导入android.widget.ExpandableListAdapter;
导入android.widget.ExpandableListView;
导入android.widget.TextView;
导入android.widget.ExpandableListView.OnChildClickListener;
公共类ApiDemos扩展了ExpandableListActivity{
//如果我为每个孩子都设置了这个,它就可以正常工作
private View.OnClickListener cl1=new View.OnClickListener(){
公共void onClick(视图v){
if(((TextView)v).isSelected()==false){
((文本视图)v).setSelected(true);
(文本视图)v.setTextColor(红色);
}否则{
((文本视图)v).setSelected(假);
(文本视图)v.setTextColor(白色);
}
}
};
//每个孩子都与其中一个有关系:
类veranstaltungView{
公共字符串文本;
公共布尔标记;
公共veranstaltungView(字符串txt){
text=txt;
标记=假;
}
}
//这是在整个ExpandableListView上设置的。它只是没有得到
//里面!
private OnChildClickListener cl=new OnChildClickListener(){
公共布尔onChildClick(ExpandableListView父视图,视图v,
int groupPosition、int childPosition、long id){
if(((TextView)v).isSelected()==false){
veranstaltungenList.get(groupPosition).get(childPosition).marked=true;
((文本视图)v).setSelected(true);
(文本视图)v.setTextColor(红色);
}否则{
veranstaltungenList.get(groupPosition).get(childPosition).marked=false;
((文本视图)v).setSelected(假);
(文本视图)v.setTextColor(白色);
}
返回false;
}
};
专用静态最终整型白色=0xffffffff;
专用静态最终整数红色=0xffbc0000;
可扩展列表适配器;
私人ArrayList veranstaltungenList;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//生成一些元素
veranstaltungenList=新建ArrayList();
对于(int i=0;i<6;i++){
ArrayList学期=新ArrayList();
对于(int j=0;j<3;j++){
添加(新的Veranstaltung视图(“Veranstaltung”+i+”)
+j));
}
veranstaltungenList.add(学期);
}
//创建并设置适配器
ExpandableListView elv=getExpandableListView();
mAdapter=新的MyExpandableListAdapter();
setListAdapter(mAdapter);
elv.setItemsCanFocus(假);
elv.setChoiceMode(可扩展列表视图。选项\模式\多个);
elv.setOnChildClickListener(cl);
}
公共类MyExpandableListAdapter扩展了BaseExpandableListAdapter{
//团体
私有字符串[]semesterArray={“SEMESTER1”,“SEMESTER2”,
“第三届”、“第四届”、“第五届”、“第六届”};
公共对象getChild(int-groupPosition,int-childPosition){
返回veranstaltunglist.get(groupPosition.get(childPosition.text);
}
公共长getChildId(int-groupPosition,int-childPosition){
返回子位置;
}
公共整数getChildrenCount(整数组位置){
返回veranstaltunglist.get(groupPosition.size();
}
公共文本视图getGenericView(){
//ExpandableListView的布局参数
AbsListView.LayoutParams lp=新的AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_父对象,64);
TextView TextView=新的TextView(ApiDemos.this);
textView.setTextColor(白色);
textView.setLayoutParams(lp);
//将文本垂直居中
textView.setGravity(Gravity.CENTER|u VERTICAL | Gravity.LEFT);
//设置文本起始位置
setPadding(36,0,0,0);
返回文本视图;
}
公共视图getChildView(int-groupPosition、int-childPosition、,
布尔值isLastChild、视图转换视图、视图组父级){
TextView TextView=null;
textView=getGenericView();
setText((字符串)getChild(groupPosition,childPosition));
textView.setClickable(真);
textView.setSelected(veranstaltungenList.get(groupPosition.get(
(位置)标记);
if(veranstaltunglist.get(groupPosition.get(childPosition.marked==true)
textView.setTextColor(红色);
其他的
textView.setTextColor(白色);
//setOnClickListener(cl1);
复述