改变列表视图项的颜色,通过另一个列表视图的外部点击监听器通知数据变化。

问题描述 投票:0回答:1

我想改变列表视图 "monitoredpatientlsit "中第一行的颜色。如果我点击allpatientslist中的一个项目,并且它已经存在于monitoredpatient中,那么这种改变就会发生。因此,假设我点击了第3项,而它也恰好是监控病人中的第3项。我希望代码能将监控病人中第一个视图的颜色改为红色。然而它没有,我认为这与 "notifydatasetchanged "方法有关,因为当我把它注释出来时,它将按照我想要的方式工作,但当我把它放回代码中时,颜色根本没有变化。有什么想法吗?

      allpatientslist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            if (selectedpatients.contains(allpatients.get(position))){
                selectedpatients.remove(selectedpatients.indexOf(allpatients.get(position)));
                refomatToRed();
                monitoredPatientListAdapator.notifyDataSetChanged();
                view.setBackgroundColor(Color.parseColor("#F4F6F1"));

            }else{
                view.setBackgroundColor(Color.parseColor("#B0D880"));
                selectedpatients.add(allpatients.get(position));
                monitoredPatientListAdapator.notifyDataSetChanged();

            }
        }
    });

public void refomatToRed(){
    monitoredpatientslist.getChildAt(0).setBackgroundColor(Color.RED);

        }

编辑:我只是在适配器里面实现了颜色的变化就解决了,因为每次由于滚动功能,通过视图删除一个项目,实际上这个项目是被破坏的,会失去任何格式化下来的内容。

java arrays android-studio android-listview android-arrayadapter
1个回答
0
投票

当你在适配器上调用notifyDataSetChanged()时,列表被重新绘制。改变第一个子代的颜色没有任何效果,因为这个子代在下面一行被销毁。

monitoredPatientListAdapator.notifyDataSetChanged();
refomatToRed();
© www.soinside.com 2019 - 2024. All rights reserved.