【问题标题】:ListView with RelativeLayout not highlighting background on press带有RelativeLayout的ListView在按下时不突出显示背景
【发布时间】:2011-03-07 12:11:33
【问题描述】:

我想要一个元素列表(使用 ListView),并且列表中的每个元素都使用相对布局进行样式设置。目前,这些项目正在正确显示,但是,由于某种原因,列表视图项目在单击时不会发出绿色光。这是为什么呢?

我已将所有代码删除到最低限度,它仍然这样做。

活动类

package com.test;

import android.app.Activity;

public class My_ListView extends Activity
{
    private ListView_Adapter listViewAdapter;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_listview);


        // initialise the list-view object
        listViewAdapter = new ListView_Adapter(this);
        listView = (ListView) findViewById(R.id.listview);
        listView.setAdapter(listViewAdapter);


        for (int i=0;i<20;i++)
        {
            listViewAdapter.add("item "+i);
        }

    }
    public void clicked(View v)
    {
        v.setBackgroundColor(0xFF0000FF);
    }
}

列表视图项适配器类

package com.test;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class ListView_Adapter extends ArrayAdapter<String>
{
    public ListView_Adapter(Context c)
    {
        super(c, R.layout.my_listview_item);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        StationFinder_ListViewItemHolder holder = null;

        if (row == null)
        {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            row = inflater.inflate(R.layout.my_listview_item, parent, false);
            holder = new StationFinder_ListViewItemHolder(row);
            row.setTag(holder);
        }
        else
        {
            holder = (StationFinder_ListViewItemHolder) row.getTag();
        }

        holder.populateFrom(getItem(position));

        return row;
    }

    static class StationFinder_ListViewItemHolder
    {
        private TextView destination = null;

        StationFinder_ListViewItemHolder(View row)
        {
            destination = (TextView) row.findViewById(R.id.text1);
        }

        void populateFrom(String locationDistance)
        {
            destination.setText(locationDistance);
        }

    }
}

my_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >

    <ListView android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</LinearLayout>

my_listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="clicked"
    >
    <TextView android:id="@+id/text1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        />
</RelativeLayout>

【问题讨论】:

    标签: android listview android-relativelayout


    【解决方案1】:

    我想你可能需要在设置背景颜色后调用invalidate()

    您可能希望通过为您的 ListView 设置 listSelector 和可能的 drawSelectorOnTop 来执行此操作。这样,选择/取消选择和点击将以正常方式处理。

    编辑 - 此外,由于您使用的是 ListView,因此您可能希望通过在 ListView 上设置 OnItemClickListener 来监听点击。

    【讨论】:

    • 啊,着色只是为了检查项目是否被点击。我没有那个测试,它仍然没有突出显示
    • 也无效不会改变任何东西,也不会设置 drawSelectorOnTop=true
    • 如何在 clicked() 中设置断点以查看它是否真正被调用?
    • 是的,clicked() 被调用了,但是列表视图会自动为按下时的背景着色,对吧?这个没有,我想让它再次这样做
    • 我发现删除 onClick 函数调用现在可以让背景在按下时变为绿色。谢谢
    猜你喜欢
    • 2013-11-03
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多