当我正在开发一个需要使用API 8的项目时,我发现很多关于如何突出显示行的示例不起作用,因为它们需要最低API 10。
所以我环顾四周,通过OnListItemClick让荧光笔工作,但是我现在的问题是,当列表中有多个项目时,它允许选择多个项目,这不是我想要的
我使用以下内容突出显示并突出显示该行:
if (selectedrow == 0) {
((TextView)v).setBackgroundColor(Color.rgb(0, 153, 204));
selectedrow = 1;
oki.setEnabled(true);
currpos = position;
File fileselected = new File(pathi.get(currpos));
} else {
((TextView)v).setBackgroundColor(Color.TRANSPARENT);
selectedrow = 0;
oki.setEnabled(false);
currpos = -1;
}
当我注意到它突出显示多行时,我在上面的代码之前尝试了以下内容:
if (currpos != -1 ) {
((ListView)l).smoothScrollToPosition(currpos);
((TextView)v).setBackgroundColor(Color.TRANSPARENT);
((ListView)l).smoothScrollToPosition(position);
selectedrow = 0;
}
我也尝试了以上内容:
if (currpos != -1 ) {
((ListView)l).setSelection(currpos);
((TextView)v).setBackgroundColor(Color.TRANSPARENT);
((ListView)l).setSelection(position);
selectedrow = 0;
}
修改*
自定义适配器现在正在运行,如下所示,但是荧光笔仍然是一个问题,我希望发布代码会对此有所了解:
public class FileListAdapter extends ArrayAdapter<String> {
private List<String> itemsll;
public FileListAdapter(Context context, int row,
List<String> iteml) {
super(context,row,iteml);
// TODO Auto-generated constructor stub
this.itemsll = iteml;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View viewnull = convertView;
if (viewnull == null) {
LayoutInflater vrow;
vrow = LayoutInflater.from(getContext());
viewnull = vrow.inflate(R.layout.row, null);
}
String currow = itemsll.get(position);
TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
rowtext.setText(currow);
if (currpos == position) {
rowtext.setBackgroundColor(Color.BLUE);
}
return viewnull;
}
public void setSelectedPosition( int pos )
{
currpos = pos; // selectedPos is global variable to handle clicked position
// inform the view of this change
notifyDataSetChanged();
}
}
然后我添加了onItemClick,如下所示:
public void onItemClick( AdapterView<?> arg0,View arg1, int arg2, Long arg3) {
int pos = arg2;
fl.setSelectedPosition(pos);
}
解决。
很快注册我无法使用onListItemClick和onItemClick,并且因为类是ListActivity我不得不使用Listview lw = getListView()然后使用onItemClick方法
答案 0 :(得分:0)
你的方法是错误的有一些叫做选择器的东西几乎适用于所有的api版本而且我已经在API级别8做了它也有例子试试这个
这是适配器布局
<?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="100dp"
android:background="@drawable/rowselector" >
. . . . . .
</RelativeLayout>
你可以看到我正在设置背景,它实际上是一个选择器
我的rowselector(将其保留为drawable)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true"
android:state_pressed="true" android:drawable="@drawable/left_navbg_hover" />
<item android:state_enabled="true"
android:state_focused="true" android:drawable="@drawable/left_navbg_hover" />
<item android:state_enabled="true"
android:state_selected="true" android:drawable="@drawable/left_navbg_hover" />
<item
android:drawable="@drawable/left_navbg" />
</selector>
其中left_navbg_hover和left_navbg是我使用过的图像。
尽力而为!
答案 1 :(得分:0)
如果您使用自定义列表适配器,那么您可以做一件事:
在适配器类中创建一个公共方法,如:
public void setSelectedPosition( int pos )
{
selectedPos = pos; // selectedPos is global variable to handle clicked position
// inform the view of this change
notifyDataSetChanged();
}
在getView方法中更改backgroundcolor:
if ( selectedPos == position )
{
((TextView)v).setBackgroundColor(Color.rgb(0, 153, 204));
}
onItemClick方法调用适配器方法:
@Override
public void onItemClick( AdapterView<?> arg0, View arg1, int arg2, long arg3 )
{
int position = arg2;
youradapter.setSelectedPosition( position );
}