我想知道如何更改listView上所选项目的背景颜色.我只想更改用户点击的特定项目,这意味着如果用户点击另一个项目,它将是突出显示的项目.好吧,因为我希望它尽可能保持简单并使用默认的android listview我使用此代码:
record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
try{
for (int ctr=0;ctr<=record_items.length;ctr++){
if(i==ctr){
record_list.getChildAt(ctr).setBackgroundColor(Color.CYAN);
}else{
record_list.getChildAt(ctr).setBackgroundColor(Color.WHITE);
}
}
}
catch (Exception e){
e.printStackTrace();
}
Log.v("Selected item",record_list.getItemAtPosition(i));
}
});
Run Code Online (Sandbox Code Playgroud)
好的,这个工作正常,但问题是它很慢.现在我想知道是否有任何其他方法可以做到,它将提供与我相同的输出.
我尝试使用record_list.getSelectedView().setBackgroundColor(Color.CYAN);但它给了我一个空指针异常.
我也尝试了selector.xml,但它也没有做到这一点.此外,ListView上有一个名为listSelector的属性.如文档"Drawable用于指示列表中当前选定的项目"所述,它是可绘制的.我也相信这应该可以做到这一点,是的,它可以在我的模拟器上完成,但不是在我的Galaxy选项卡上.我也尝试了其他方法,但没有任何方法可行,因为我想要它.
我有一个简单的列表,其中包含listselector.
<ListView android:id="@+id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_below="@+id/round"
android:listSelector="#99000000" android:clickable="true" android:cacheColorHint="#00000000" android:background="#00000000">
</ListView>
Run Code Online (Sandbox Code Playgroud)
如您所见,android:listSelector ="#99000000",但"黑色alpha"颜色应用于整个列表,而不是所选项目.
所以这就是我现在所拥有的,但整个列表仍然变黑
:: listview_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:state_focused="true"
android:drawable="@drawable/list_normal" />
<item android:state_pressed="true"
android:drawable="@drawable/list_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/list_active" />
</selector>
Run Code Online (Sandbox Code Playgroud)
:: colors.xml
<resources>
<drawable name="list_normal">#96FFFFFF</drawable>
<drawable name="list_active">#66000000</drawable>
<drawable name="list_pressed">#CA000000</drawable>
</resources>
Run Code Online (Sandbox Code Playgroud)
::我列表中的xml标记
android:listSelector="@drawable/listview_background"
Run Code Online (Sandbox Code Playgroud) 我有一个Android列表视图.我想在单击一个listview项目时更改listview项目背景.
然后,之前选择的项目必须返回默认背景.这意味着只需要选择一个项目.
我已经搜索了很长时间了.我可以使用onItemClick()更改所选项目的背景
但我不能改变以前选择的项目.例如,如果我选择第二个项目,它就会被更改.然后我选择第三项.哦,我的上帝!它也改变了!我能为此做些什么 我怎么能得到以前的位置?
这是我的android代码.
private class ListViewItemClickListener implements
AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
TextView title = (TextView) view.findViewById(R.id.title);
title.setBackgroundResource(R.drawable.list_shape);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在ListView中设置OnItemClick事件中选择的项目,它只是不会选择项目.我究竟做错了什么?
lView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(@SuppressWarnings("rawtypes") AdapterView parent, View clickedview, int position, long id)
{
clickedview.setSelected(true);
mItemsAdapter.select(position);
}
});
Run Code Online (Sandbox Code Playgroud)
几件事情:
1.我试图在列表视图上实现Multiple Select.
2.我无法从ListActivity扩展,因为Activity已经从BaseActivity自定义类扩展.
3. mItemsAdapter是一个扩展BaseAdapter的自定义ItemsAdapter适配器.
4.我不需要一个复选框,只是为了能够看到选中的行很好.
5. ItemsAdapter重写getView()并通过膨胀xml来设置行的布局
我有自定义适配器视图的问题.我尝试,改变背景view的Click事件.我有AdapterView.OnItemClickListener,我在哪里获得选择项目,并打电话myListView.invalidate();
无效后,呼叫adapters getView(...).这里是代码:
@Override public View getView(int position,View convertView,ViewGroup parent){
View row = convertView;
ProjectAdapterData projectItem;
if (row == null) {
LayoutInflater inflater = LayoutInflater.from(context);
row = inflater.inflate(R.layout.project_small_item_layout, null);
ProjectAdapterData projectAdapterData = new ProjectAdapterData();
row.setTag(projectAdapterData);
name = (TextView)row.findViewById(R.id.txtObjectName);
if (objectData[position].Name!= null)
name.setText(objectData[position].Name);
adress = (TextView)row.findViewById(R.id.txtObjectAdress);
if (objectData[position].Adress != null)
adress.setText(objectData[position].Adress);
}
else {
background = (RelativeLayout)row.findViewById(R.id.rlProjectBackground);
if (objectData[position].isSelected)
background.setBackgroundColor(context.getResources().getColor(R.color.cProjectSelected));
else
background.setBackgroundResource(R.color.cProjectUnSelected); //it's calls, but no result
row.invalidate();
}
return row;
} …Run Code Online (Sandbox Code Playgroud)