【问题标题】:ExpandableListView child items don't get focus when touchedExpandableListView 子项在触摸时没有获得焦点
【发布时间】:2010-04-16 09:17:05
【问题描述】:

好的,所以我写了一个 ExpandableListView 和子类 BaseExpandableListAdapter... 一切正常,除了我无法让子视图在单击时获得焦点。如果我使用轨迹球,一切正常。但是,如果我尝试点击一个孩子,我将得不到任何反馈。

我尝试过设置 android:focusable、a​​ndroid: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;
    }
}

提前致谢!

【问题讨论】:

  • 我在尝试在 ExpandedListView 中以编程方式管理焦点时遇到了类似的问题。为什么你的 'wrap_content' 修复让我难以理解。
  • 从技术上讲,这应该作为评论而不是作为答案添加......
  • 我不知道为什么它也有效,但它对我有用

标签: android focus touch expandablelistview


【解决方案1】:

好吧,我终于想通了!

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

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

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

我将其更改为 wrap_content 后,一切都开始正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多