【问题标题】:Set ListView item background at onCreate在 onCreate 设置 ListView 项目背景
【发布时间】:2017-07-03 03:37:09
【问题描述】:

我有一个列表视图,我想在 onCreate 设置第一项的背景颜色。我试过这个:

    mDrawerList = (ListView) findViewById(R.id.navList);
    DrawerListAdapter adapter = new DrawerListAdapter(this, mNavItems);
    mDrawerList.setAdapter(adapter);
    View view = mDrawerList.getChildAt(1);
    view.setBackgroundColor((parseColor("#008CC3")));

但它给出了 NPE。我该怎么做?

【问题讨论】:

    标签: android listview background listviewitem


    【解决方案1】:

    由于您已经拥有自己的 ListAdapter (DrawerListAdapter) 类,您应该能够覆盖其中的 getView(int position, View convertView, ViewGroup parent) 方法。在那里你可以简单地做

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        if (position == 0) {
            view.setBackgroundColor(Color.parseColor("#008CC3"));
        }
        return view;
    }
    

    补充提示:

    • 您想获得第一个项目,但正在调用getChildAt(1),这实际上会给您第二个项目。
    • ListViews 在某种程度上已被弃用,您应该查看 RecyclerViews

    【讨论】:

    • 你能告诉我我应该粘贴在那里的确切代码吗?
    • 更新了评论。假设它正在扩展 ListAdapterArrayAdapter
    • 谢谢。但后来我怎样才能把它改回透明呢?因为我试图在 onItemClick 上这样做,但它不起作用。
    • mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { parent.getChildAt(position).setBackgroundColor( (parseColor("#008CC3"))); parent.getChildAt(lastPosition).setBackgroundColor(0x00000000); selectItemFromDrawer(position); lastPosition = position; } });
    • lastPosition默认设置为0,所以第一次点击第一个项目的背景变成透明的。
    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多