单击时更改列表视图项的背景颜色

 v88v的秋天 发布于 2023-02-13 16:29

我的应用程序包含ListView,当用户单击其中一个项目时,所选项目颜色将更改为其他颜色.我通过android:listSelector="@android:color/darker_gray"在我的activity_main.xml文件中的ListView中添加它来完成此操作.这正是我正在寻找的,但我有它的问题,因为当用户持有项目但不要点击它时背景颜色也会改变.所以我想知道这是否是一个非常简单的方法,我可以把这个代码:android:listSelector="@android:color/darker_gray"在我的OnItemClick方法.这样,当我点击列表视图中的项目时,我想要更改所选项目背景.另外,我不想重新排列我的列表视图并将所选项目置于顶部,我只是希望用户点击的所有项目都具有不同的背景颜色,这就是为什么我要将编码放在onItemClick中.目前我正在使用我的ListView的默认sample_list_item_1.

关于App的其他信息:这有点像教程应用程序,其中向用户显示教程名称列表.当用户点击名称时,它会加载一个可流式链接,这样用户就可以在应用程序中流式传输它(这已经完成).我还添加了一个toast消息,显示当用户点击可流式链接时(这有点像我想要的eccept而不是toast消息,它将所选项目的背景颜色更改为darker_grey).我能够在if语句中做所有这些.例如:

在OnCreate里面()

String[] Tutorial = getResources().getStringArray(R.array.Tutorial);
spinner1 = (ListView) findViewById(R.id.spinner1);
spinner1.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, Tutorial));
spinner1.setOnItemClickListener(new OnItemClickListener() 
{
    public void onItemClick(AdapterView parent, View v, int pos, long id) 
    {
        if(pos==0)
        {
            // Do nothing       
        }
        else if(pos==1)
        {
            Intent i = new Intent();
            i.setAction(Intent.ACTION_VIEW);
            Uri uri = Uri.parse("https://download846.mediafire.com/8cfxi4026iog/x4ywqe8dc8u2r4f/Hetalia+Season+1+Episode+1.mp4"); /* this is a random link to show you that my programing so far works(Enter link to the selected tutorial here)*/
            i.setDataAndType(uri, "video/*");
            try {
                startActivity(i);
            } catch (ActivityNotFoundException e) {
                 // Handle exception
            } catch (Exception e) {
                // Handle exception 
            }
        Toast.makeText(parent.getContext(), parent.getItemAtPosition(pos).toString(), Toast.LENGTH_SHORT).show();       
        // android:listSelector="@android:color/darker_gray"
        }           
    }           
}

如果你仍然不明白我的意思,googlePlay商店中有一个名为Anime Plus TV的应用程序可以做类似于我的意思.在应用程序中,当你点击一个系列的剧集(例如:火影忍者)时,它会加载剧集的流媒体链接,并且还会更改所选剧集的文字颜色,以便当用户完成观看剧集时,他不会对于他正在观看哪一集感到困惑,因为一些流媒体链接并不能真正给你看你正在观看的视频的真实标题.但与他们不同,我只想更改所选教程的背景

1 个回答
  • 你有两种选择.

    1.progamatically: 在这种情况下,当你为ListView设置OnItemClickListener时,获取它的子和setBackground.

            String[] inputs = {"test1","test2","test3"};
        final ListView l = (ListView)findViewById(R.id.listview);
        l.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,inputs));
        l.setOnItemClickListener(new OnItemClickListener() {
    
            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int position,
                    long id) {
                l.getChildAt(position).setBackgroundColor(android.R.color.black);
            }
        });
    

    您可以在文件夹res/values下的color.xml文件中定义颜色(如果您没有它,则创建它)并使用它们像R.color.gray(示例)而不是android.R.color.black.

    2.使用自定义listSelector

    在文件夹drawable下创建listselector.xml.在listselector中,您可以像这样处理不同的状态:

        <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Selector style for listrow -->
        <item 
            android:state_selected="false"
            android:state_pressed="false" 
            android:drawable="@drawable/test1" />
        <item android:state_pressed="true" 
            android:drawable="@drawable/test2" />
        <item android:state_selected="true"
            android:state_pressed="false" 
            android:drawable="@drawable/test3" />
        </selector>
    

    对于你的情况,我认为使用第一种方式是最好的.问你是否还有其他问题:)

    2023-02-13 16:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有