我试过在线寻找一个很好的解决方案,但我似乎找不到一个。
有一个帐户列表视图。所选帐户的背景为浅蓝色,但仅在按下时才显示。这是我从以下地方获取代码的地方:Android ListView selected item stay highlighted
在onCreate方法中,我有一个onItemClickListener方法,如果我做listview.setSelection(0);在onItemClick方法之上,默认项是listview中的第一项。系统知道列表中的第一个帐户是当前选中的项目,但如何在视觉上显示它?
基本上,我想以某种方式做view.setSelected(true);列表视图中的第一项。
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parentAdapter,
View view, int position, long id) {
view.setSelected(true);
Account account= accounts.get(position);
accountNumber = account.getAccountNumber();
}
});
谢谢!
编辑:这是我们自定义适配器的getView
public final View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(rowResourceId, parent, false);
textView = (TextView) rowView.findViewById(R.id.textView);
textView.setTextColor(Color.BLACK);
textView.setText(objects.get(position).debug());
return rowView;
}
答案 0 :(得分:1)
正确的方法是使用自定义数组适配器并覆盖getView方法。对于第一个项目,您将设置背景:
public final View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(rowResourceId, parent, false);
if(position == 0){
//you might remove this check if your develop for new api's only
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
rowView.setBackgroundDrawable();
} else {
rowView.setBackground();
}
}
textView = (TextView) rowView.findViewById(R.id.textView);
textView.setTextColor(Color.BLACK);
textView.setText(objects.get(position).debug());
return rowView;
}
在此处阅读更多相关信息:Vogella - Using lists in android此解决方案可能更适合强制选择。如果选择是由用户执行的操作,您实际上只想突出显示第一行,因此在获取视图方法中对其进行操作。
答案 1 :(得分:0)
所以我在代码方面做了一些欺骗并对其进行了硬编码,但它现在有效了!
对于自定义适配器中的getView:
if (position == 0) {
textView.setBackgroundColor(Color.rgb(173, 211, 224));
}
在实际活动的onCreate方法中,对于setOnItemClickListener:
if (position != 0) {
View rowView = listview.getChildAt(0);
TextView textView = (TextView) rowView.findViewById(R.id.textView);
textView.setBackgroundColor(Color.rgb(227, 236, 239));
} else {
View rowView = listview.getChildAt(0);
TextView textView = (TextView) rowView.findViewById(R.id.textView);
textView.setBackgroundColor(Color.rgb(173, 211, 224));
}