【问题标题】:Change colour of listview item when clicked [duplicate]单击时更改列表视图项目的颜色[重复]
【发布时间】:2018-11-30 03:28:57
【问题描述】:

是否可以在单击时更改列表视图项的颜色,并且在再次单击之前它将是该颜色?我使用适配器从 firebase 获取数据。

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    如果你只想改变一次颜色:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
              view.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
    
         }
    
    });
    

    您可以使用以下方式切换列表视图项的更改:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
            LoadListerListViewObject currentObject = loadListerListViewObjectArrayList.get(position);
            //If the object is inactive...
            if (!currentObject.getIsActivated()) {
                //Set the object as active and change the color to green
                loadListerListViewObjectArrayList.set(position, new LoadListerListViewObject(currentObject.getDate(), currentObject.getTagNumber() true));
                view.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
                //If the object is active...
                  } else {
                     //Set the object as active and change the color to grey
                     loadListerListViewObjectArrayList.set(position, new LoadListerListViewObject(currentObject.getDate(), currentObject.getTagNumber(), false));
                     view.setBackgroundColor(getResources().getColor(R.color.colorGreyForButton));
                  }
    
               }
    
           });
    

    这使用关联列表视图对象的属性来检查项目是否已被选中,然后根据此更改颜色。我想你也想“不改变”颜色。你可能需要这样的东西。

    【讨论】:

    • 嗨,也许是个愚蠢的问题。但什么是 LoadListerViewObject?
    • @Alex 这不是一个愚蠢的问题!这是我为处理该特定代码中的一些逻辑而制作的自定义对象。我使用它(除其他外)来引用列表视图项是否已被点击。这就是 getIsActivated 查询的意义所在。您也可以通过创建一个具有布尔值的关联数组并检查它以查看是否已点击特定项目来做到这一点。
    • 感谢您的解释。但是你看,我是这个 android 编码的初学者,所以你能解释一下在哪里创建这个数组以及如何创建这个数组吗?我尝试了第一个,它成功了。但是我想在单击它时保存该值,并且在我重新启动我的应用程序时它会保持不变。
    • 老实说,@Alex,这是一个更大的怪物。您只需创建一个具有列表视图大小的数组。用假布尔值填充数组。然后,当您选择列表视图项时,使用 OnItemClick 的位置参数来选择数组中的该项。将值更改为真。无论何时出于任何原因离开活动,您都需要将信息保存到内部存储;并在活动开始时调用它。当您添加和减去列表视图项时,您还需要从该列表中添加和删除布尔值。
    • 好的,听起来很复杂!但是我有一个数组适配器,它使用一个文本视图来显示我的列表视图中的每个项目。这会产生问题吗?
    【解决方案2】:

    是的,可以在单击时更改列表视图项目的颜色,并且在您再次单击它之前它将是该颜色。 只需在您的适配器中编写一个项目单击并根据您的条件更改颜色。

        lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
              //Here you have view and position . so use both in a way you want.
        }
    });
    

    如果您需要另一个示例,请告诉我。 #KeepCoding

    【讨论】:

    • 你有没有试过用很长的列表来做这个?
    • 你能再给我一个例子吗?
    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多