繁体   English   中英

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

[英]change the background color of a listview item when clicked

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

有关应用程序的附加信息:这有点像一个教程应用程序,其中向用户显示了一个教程名称列表。 当用户单击名称时,它会加载一个可流式链接,以便用户可以在应用程序内部流式传输(已完成)。 我还添加了一条Toast消息,该消息在用户单击可流式链接时显示(这有点像我想要的东西,而不是Toast消息,它将所选项目的背景颜色更改为darker_grey)。 我能够在if语句中完成所有这些操作。 例如:

里面的OnCreate()

String[] Tutorial = getResources().getStringArray(R.array.Tutorial);
spinner1 = (ListView) findViewById(R.id.spinner1);
spinner1.setAdapter(new ArrayAdapter<String>(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.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);
        }
    });

您可以在color.xml文件的res / values文件夹下定义颜色(如果没有,请创建颜色),然后像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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM