开发者

ListView with RelativeLayout not highlighting background on press

I want to have a list of elements (using a ListView) and each element in list is styled with a relative layout. Currently, the items are being displayed correctly, however, for some reason the listview items dont glow green when they're clicked. Why is this?

I have removed all code to minimals and it still does this.

Activity class

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);
    }
}

The listview item adapter class

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 = (Text开发者_开发技巧View) 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>


I think you may have to call invalidate() after setting the background color.

You may want to do this instead by setting the listSelector and possibly drawSelectorOnTop for your ListView. That way the selection/deselection and clicks will be handled in the normal manner.

Edit - also, since you're using a ListView, you probably want to listen for clicks by setting an OnItemClickListener on your ListView.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜