Android 具有RelativeLayout的ListView在按下时不突出显示背景
我希望有一个元素列表(使用ListView),列表中的每个元素都使用相对布局进行样式设置。当前,项目显示正确,但是,由于某些原因,单击listview项目时,它们不会显示为绿色。为什么会这样 我已经删除了所有代码到最低限度,它仍然这样做 活动类Android 具有RelativeLayout的ListView在按下时不突出显示背景,android,listview,android-relativelayout,Android,Listview,Android Relativelayout,我希望有一个元素列表(使用ListView),列表中的每个元素都使用相对布局进行样式设置。当前,项目显示正确,但是,由于某些原因,单击listview项目时,它们不会显示为绿色。为什么会这样 我已经删除了所有代码到最低限度,它仍然这样做 活动类 package com.test; import android.app.Activity; public class My_ListView extends Activity { private ListView_Adapter listV
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);
}
}
}
package.com.test;
导入android.app.Activity;
公共类My_ListView扩展活动
{
专用ListView_适配器listViewAdapter;
私有列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.my_listview);
//初始化列表视图对象
listViewAdapter=新的ListView_适配器(此);
listView=(listView)findViewById(R.id.listView);
setAdapter(listViewAdapter);
对于(int i=0;i我认为在设置背景色后,您可能需要调用invalidate()
您可以通过为ListView设置和(可能的话)来执行此操作。这样,选择/取消选择和单击将以正常方式处理
编辑-另外,由于您使用的是ListView,您可能希望通过在ListView上设置一个OnItemClickListener
来监听点击。啊,上色只是为了检查项目是否被点击。我没有进行测试,它仍然没有高亮显示也无效,没有改变任何内容,没有r是否设置drawSelectorOnTop=True在clicked()中设置断点以查看它是否真的被调用?是的,clicked()正在调用,但ListView会自动在按下时为背景上色,对吗?这一个不会,我想让它这样做,againI发现删除onClick函数调用后,现在可以在按下时将背景上色为绿色。谢谢
<?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>
<?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>