2011-12-13 62 views
0

我希望能够根据其类型以不同颜色显示Listview的行。所以我使用下面的代码创建了一个自定义适配器。调用Custom SimpleCursorAdapter时行不刷新

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

第一次使用这个代码在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(); 
      } 
    }); 
0

谢谢您的回复,我已经把代码放到getView的要求,像这样 -

​​

我不知道在哪里放线myListView.invalidateViews ();但目前情况与Listview未更新的情况相同

+0

put myListView.invalidateViews();在你的活动方法(UI)中。例如在'myListView.setOnItemClickListener(新OnItemClickListener(){ \t \t \t @Override \t \t \t公共无效onItemClick(适配器视图父,浏览视图, \t \t \t \t \t INT位置,长ID){ \t \t \t \t myListView.invalidateViews(); \t \t \t} \t \t});' – breceivemail

+0

我编辑了我的答案 – breceivemail

0

尝试在列表中看到adapter,请拨打notifyDataSetChanged。确保你在UI线程上做到这一点。