我希望能够根据类型以不同的颜色显示我的Listview行。所以我使用下面的代码创建了一个自定义适配器。
startManagingCursor(cursor);
Lectures_Adapter adapter = new Lectures_Adapter(this,R.layout.menu_item,cursor,FROM,TO);
menuList.setAdapter(adapter);
自定义适配器使用此代码 -
public Lectures_Adapter(Context context, int layout, Cursor c, String[] from,int[] to) {
super(context, layout, c, from, to);
this.appContext=context;
this.layout=layout;
this.mycursor=c;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position > 0)
{
RelativeLayout rowFill = (RelativeLayout) convertView.findViewById(R.id.rowFill);
String title = mycursor.getString(0);
int myColor = 0;
int myPos = title.indexOf("Nurse");
int myPos2 = title.indexOf("masterclass");
if (myPos >= 0)
{
myColor = Color.parseColor("#99FF66");
}
else if (myPos2 >= 0)
{
myColor = Color.parseColor("#FF99FF");
}
else
{
myColor = Color.parseColor("#FFFF66");
}
convertView.findViewById(R.id.rowFill).setBackgroundColor(myColor);
}
return view;
}
一切正常并以适当的颜色显示行,但第一页始终保持不变(第一行除外),当我选择一行并返回Listview时,更改不适用。如何使Listview始终保持自定义适配器设置?
答案 0 :(得分:0)
首先在getView方法中使用此代码:
if (convertView == null) {
LayoutInflater inflator = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflator.inflate(R.layout.my_layout,null);
} else {
rowView = (View) convertView;
}
使用以下代码来应用更改。
myListView.invalidateViews();
修改强>
把myListView.invalidateViews();在您的活动方法(UI)中。例如在
中 myListView.setOnItemClickListener(new OnItemClickListener()
{
@Override public void onItemClick(
AdapterView<?> parent, View view, int position, long id) {
myListView.invalidateViews();
}
});
答案 1 :(得分:0)
感谢您的回复,我已按要求将代码放入getView中 -
if (convertView == null) {
LayoutInflater inflator = (LayoutInflater) this.appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflator.inflate(this.layout,null);
} else {
convertView = (View) convertView;
}
return view;
我不知道在哪里放行myListView.invalidateViews();但目前情况仍然与Listview未更新
相同答案 2 :(得分:0)
尝试在列表视图notifyDataSetChanged
上调用adapter
。确保在UI线程上执行此操作。