【问题标题】:Redrawing of SlidingMenu programmatically以编程方式重绘 SlidingMenu
【发布时间】:2014-08-05 18:55:27
【问题描述】:

我成功地使用了 Jeremy Feinstein 的 SlidingMenu。在幻灯片菜单中,我创建了一个项目列表,如下图所示。

我已经设法让它正常工作,直到现在我决定在所选项目的左侧添加一个指示符(一个矩形颜色),这给我带来了一些麻烦。

我尝试了一些解决方案,例如销毁代表 SlideMenu 的 RelativeLayout,但在某些情况下有 200 多个项目,并且重新创建它非常耗时。

其他不起作用的解决方案是获取与项目关联的视图,并以编程方式更改背景颜色。这里的问题是当有超过 12 个项目时(我的屏幕上显示的最大值)。在这种情况下,如果我尝试更改第 15 项的颜色(即),我会得到 NullPointerException。

最终我优雅地做到了:

private void updateSlideViewIndicator(int id_from, int id_to) {
    SectionItem si = (SectionItem) slidePreguntas.getSectionListAdapter().getChild(0, id_from);
    si.setActualItem(false);
    si = (SectionItem) slidePreguntas.getSectionListAdapter().getChild(0, id_to);
    si.setActualItem(true);
}

使用此代码,我更改了 Item 对象中的一个私有字段,该字段帮助我清除“来自”我来的项目,并突出显示“我去”的项目。

此外,我在 SectionListAdapter.java 的 getChildView 中查看该字段:

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.pregunta_slide_menu_sectionitem,
                parent, false);
    }

    SectionItem oSectionItem = this.sections.get(groupPosition).getSectionItems().get(childPosition);

    TextView titleView = (TextView) convertView
            .findViewById(R.id.slidingmenu_sectionitem_label);
    titleView.setText(oSectionItem.getTitle());

    TextView textView = (TextView) convertView
            .findViewById(R.id.slidingmenu_sectionitem_text);
    textView.setText(oSectionItem.getText());

    View indicator = (View) convertView
            .findViewById(R.id.slidingmenu_sectionitem_indicator);

    if (oSectionItem.isActualItem()) {
        indicator.setBackgroundColor(this.context.getResources()
                .getColor(R.color.marca));
    } else {
        indicator.setBackgroundColor(this.context.getResources()
                .getColor(R.color.blanco));
    }

    return convertView;
}

此解决方案的问题在于,仅当我将 slideMenu 滚动到所选项目的可见性之外并将其返回时,才会更新绿色指示器。只要我隐藏 slideMenu 并再次显示它而不滚动,突出显示的项目仍然是错误的。我也尝试过再次设置可见性(不可见)和可见性,但它也不起作用。我以为这样可能会调用 getChildView 函数,但事实并非如此。

我希望选中的项目在被选中时会被高亮显示,并且没有必要滚动列表并再次返回以正确查看它。

我确信必须有解决方案,有人对此有所了解吗?

【问题讨论】:

    标签: android layout expandablelistadapter


    【解决方案1】:

    你为什么不尝试使用

    你的视图上的 invalidateViews() 方法?

    【讨论】:

    • 非常感谢,我在某些视图上尝试了 .invalidate,但没有成功。但是在 ExpandableListView 上的 invalidateViews() 它起作用了!
    猜你喜欢
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多