Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ExpandableListView-选择元素_Android_Expandablelistview - Fatal编程技术网

Android ExpandableListView-选择元素

Android ExpandableListView-选择元素,android,expandablelistview,Android,Expandablelistview,我正在尝试创建一个带有可选元素(子元素)的ExpandableListView,以便在关闭组或滚动所选元素后,这些选择不会消失。 我还没有找到任何本机解决方案,因此我尝试将元素的选定状态保存在单独的列表中,并在onChildClickListner中更改元素的状态和颜色。问题是-我无法让Listner工作。它就是进不去。但是,我可以分别为每个孩子设置一个列表。这确实有效,但并不能解决我的问题,因为在这种情况下,我得不到任何关于孩子在小组中的位置的信息。 这可能只是一个小错误。。代码如下: p、

我正在尝试创建一个带有可选元素(子元素)的ExpandableListView,以便在关闭组或滚动所选元素后,这些选择不会消失。 我还没有找到任何本机解决方案,因此我尝试将元素的选定状态保存在单独的列表中,并在onChildClickListner中更改元素的状态和颜色。问题是-我无法让Listner工作。它就是进不去。但是,我可以分别为每个孩子设置一个列表。这确实有效,但并不能解决我的问题,因为在这种情况下,我得不到任何关于孩子在小组中的位置的信息。 这可能只是一个小错误。。代码如下:

p、 有些变量名是德语的,很抱歉=) 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);
复述