代码之家  ›  专栏  ›  技术社区  ›  Justin

expandableListView子项在触摸时无法获得焦点

  •  5
  • Justin  · 技术社区  · 14 年前

    好的,所以我写了一个expandablelistview和一个子类baseexpandablelistadapter…一切都很好,除了我不能让孩子的意见采取焦点时,点击。如果我用轨迹球,一切正常。但如果我试着点击一个孩子,我就不会得到任何反馈。

    我试过设置android:focusable、android:focusableintouchmode和android:clickable(我也试过通过代码设置),但是我什么都做不到。有什么主意吗?

    这是我的适配器代码:

    public class ExpandableAppAdapter extends BaseExpandableListAdapter
    {
        private PackageManager m_pkgMgr;
        private Context m_context;
        private List<ApplicationInfo> m_groups;
        private List<List<ComponentName>> m_children;
    
        public ExpandableAppAdapter(Context context, List<ApplicationInfo> groups, List<List<ComponentName>> children)
        {
            m_context = context;
            m_pkgMgr = m_context.getPackageManager();
            m_groups = groups;
            m_children = children;
        }
    
        @Override
        public Object getChild(int groupPos, int childPos) 
        {
            return m_children.get(groupPos).get(childPos);
        }
    
        @Override
        public long getChildId(int groupPos, int childPos) 
        {
            return childPos;
        }
    
        @Override
        public int getChildrenCount(int groupPos) 
        {
            return m_children.get(groupPos).size();
        }
    
        @Override
        public View getChildView(int groupPos, int childPos, boolean isLastChild, View convertView, ViewGroup parent) 
        {
            if (convertView == null)
            {
                LayoutInflater inflater = LayoutInflater.from(m_context);
                convertView = inflater.inflate(R.layout.expandable_app_child_row, null);
            }
    
            ComponentName child = (ComponentName)getChild(groupPos, childPos);
            TextView txtView = (TextView)convertView.findViewById(R.id.item_app_pkg_name_id);
            if (txtView != null)
                txtView.setText(child.getPackageName());
    
            txtView = (TextView)convertView.findViewById(R.id.item_app_class_name_id);
            if (txtView != null)
                txtView.setText(child.getClassName());
    
            convertView.setFocusableInTouchMode(true);
            return convertView;
        }
    
        @Override
        public Object getGroup(int groupPos) 
        {
            return m_groups.get(groupPos);
        }
    
        @Override
        public int getGroupCount() 
        {
            return m_groups.size();
        }
    
        @Override
        public long getGroupId(int groupPos) 
        {
            return groupPos;
        }
    
        @Override
        public View getGroupView(int groupPos, boolean isExpanded, View convertView, ViewGroup parent) 
        {
            if (convertView == null)
            {
                LayoutInflater inflater = LayoutInflater.from(m_context);
                convertView = inflater.inflate(R.layout.expandable_app_group_row, null);
            }
    
            ApplicationInfo group = (ApplicationInfo)getGroup(groupPos);
            ImageView imgView = (ImageView)convertView.findViewById(R.id.item_selection_icon_id);
            if (imgView != null)
            {
                Drawable img = m_pkgMgr.getApplicationIcon(group);
                imgView.setImageDrawable(img);
                imgView.setMaxWidth(20);
                imgView.setMaxHeight(20);
            }
    
            TextView txtView = (TextView)convertView.findViewById(R.id.item_app_name_id);
            if (txtView != null)
                txtView.setText(m_pkgMgr.getApplicationLabel(group));
    
            return convertView;
        }
        @Override
        public boolean hasStableIds() 
        {
            return false;
        }
        @Override
        public boolean isChildSelectable(int groupPos, int childPos) 
        {
            return true;
        }
    }
    

    提前谢谢!

    1 回复  |  直到 12 年前
        1
  •  3
  •   Paresh Mayani jeet    12 年前

    好吧,我终于明白了!

    它实际上与我的xml文件而不是适配器有关(我显示适配器以显示我正在调用 setFocusableInTouchMode 创建子视图时)。

    我正在使用的教程(不记得是哪一个)让我将孩子的身高设置为:

    android:layout_height="?android:attr/listPreferredItemHeight"
    

    当我把它改成只包装内容时,一切都开始正常工作了。