调用Custom SimpleCursorAdapter时,行不会刷新

时间:2011-12-13 11:36:26

标签: android android-layout android-listview

我希望能够根据类型以不同的颜色显示我的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始终保持自定义适配器设置?

3 个答案:

答案 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线程上执行此操作。