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

时间:2013-12-01 05:44:08

标签: android eclipse listview android-listview

我的应用包含ListView,当用户点击其中一个项目时,所选项目颜色会更改为其他颜色。我通过在我的activity_main.xml文件中的ListView中添加此android:listSelector="@android:color/darker_gray"来完成此操作。这正是我正在寻找的,但我有它的问题,因为当用户持有项目但不要点击它时背景颜色也会改变。所以我想知道这是否是一个非常简单的方法,我可以把这个代码: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<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 个答案:

答案 0 :(得分:5)

你有两种选择。

<强> 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>

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