NAUYNUJUG 2015-07-23 09:22 采纳率: 50%
浏览 1507

关于ExpandableListView中的Adapter问题

我在ExpandableListview的二级菜单里面加了EditTest文本框,但是在调试时就出现了很奇怪的问题:但我点击子标签的文本框时键盘弹出来但是获取不了焦点,要再点一次文本框才能输入内容,而输入完后键盘一收起来刚输入的文本就没了,请问这个该怎么解决?

 private class MyExpendAdapter extends BaseExpandableListAdapter{

        /**
         * pic state
         */
        int []group_state=new int[]{R.drawable.group_right,R.drawable.group_down};//向左、向下小图标

        /**
         * group title
         */
        String []group_title=new String[]{"基本信息","商品详情","活动"};

        /**
         * child text
         */
        String [][] child_text=new String [][]{
                {"商品名称","商品价格","商品标签","商品特色","品牌"},
                {"商品颜色","重量","材料","尺码","产地"},
                {"张三","仇斌","温志豪","黎伦"}};

        /**
         * 获取一级标签中二级标签的内容
         */
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return child_text[groupPosition][childPosition];
        }

        /**
         * 获取二级标签ID
         */
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }
        /**
         * 对一级标签下的二级标签进行设置
         */
        @SuppressLint("SimpleDateFormat")
        @Override
        public View getChildView(int groupPosition, int childPosition,
                                 boolean isLastChild, View convertView, ViewGroup parent) {
            convertView=getLayoutInflater().inflate(R.layout.child, null);
            TextView tv=(TextView) convertView.findViewById(R.id.tv);
            //TextView time=(TextView) convertView.findViewById(R.id.time);
            EditText ed1 =(EditText)convertView.findViewById(R.id.edit_1);
            tv.setText(child_text[groupPosition][childPosition]);
            ed1.setText(child_text[groupPosition][childPosition]);
            //获取系统事件
           // long times=System.currentTimeMillis();
            //SimpleDateFormat format=new SimpleDateFormat("yyyy年mm月dd日hh时mm分ss秒");
            //String date=format.format(times);
            //time.setText(date);
            ed1.setText(ed1.getText());

            return convertView;
        }

        /**
         * 一级标签下二级标签的数量
         */
        @Override
        public int getChildrenCount(int groupPosition) {
            return child_text[groupPosition].length;
        }

        /**
         * 获取一级标签内容
         */
        @Override
        public Object getGroup(int groupPosition) {
            return group_title[groupPosition];
        }

        /**
         * 一级标签总数
         */
        @Override
        public int getGroupCount() {
            return group_title.length;
        }

        /**
         * 一级标签ID
         */
        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }
        /**
         * 对一级标签进行设置
         */
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded,
                                 View convertView, ViewGroup parent) {
            convertView=getLayoutInflater().inflate(R.layout.group, null);

            ImageView iv=(ImageView) convertView.findViewById(R.id.iv);
            TextView tv=(TextView) convertView.findViewById(R.id.iv_title);

            iv.setImageResource(R.drawable.group_right);
            tv.setText(group_title[groupPosition]);

            if(group_click[groupPosition]%2==0){
                iv.setImageResource(R.drawable.group_right);
            }else{
                iv.setImageResource(R.drawable.group_down);
            }


            return convertView;
        }
        /**
         * 指定位置相应的组视图
         */
        @Override
        public boolean hasStableIds() {
            return true;
        }

        /**
         *  当选择子节点的时候,调用该方法
         */
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }

    }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 02:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于在getEditText()方法中没有正确地设置焦点。在Android中,当你尝试获取一个EditText的焦点时,你需要确保它已经获得了焦点,并且它的焦点状态为FOCUS_GAINED

    首先,你需要检查EditText是否已经获得焦点:

    if (ed1.hasFocus()) {
        ed1.requestFocus(); // 设置焦点
    }
    

    然后,在getEditText()方法中,你可以使用setFocusable(true)setFocusableInTouchMode(true)来设置EditText为可获取焦点的对象。

    public void setFocus(View v, boolean focus) {
        if (v == ed1) {
            if (focus) {
                ed1.setFocusable(true); // 设置EditText为可获取焦点
                ed1.setFocusableInTouchMode(true); // 设置EditText可以接收触控事件
            } else {
                ed1.clearFocus(); // 清除EditText的焦点
            }
        }
    }
    

    现在,你应该可以在点击子标签的文本框时获取焦点并输入内容。

    评论

报告相同问题?