2011-12-13 58 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線程上做到這一點。