0

我有一个列出ListFragment中项目的应用程序。每个项目根据项目状态具有不同的背景颜色。该适配器从SimpleCursorAdapter分类,因为这些项目存储在SQL中。这些项目的编辑发生在不同的片段中。当状态发生变化时,我使用AsyncTask在GUI线程上触发适配器上的notifyDataSetChanged()。但我的清单并未更新。更新适配器数据更改后ListView项目的背景

我知道我在GUI线程上,因为我覆盖了notifyDataSetChanged类来检查。相同的痕迹也告诉我,我正在达到例程。:

@Override 
public void notifyDataSetChanged() { 
    String tag = TAG + ".notifyDataSetChanged()"; 
    Log.d(tag,"DATA SET CHANGE NOTIFICATION!"); 
    if (Looper.getMainLooper().getThread() == Thread.currentThread()) { 
     Log.d(tag,"On GUI thread!"); 
    } else { 
     Log.d(tag,"NOT on GUI thread!"); 
    } 
    super.notifyDataSetChanged(); 
} 

我希望有任何建议。感谢您的时间与兴趣。

这里是整个适配器:

public class OrderListAdapter extends SimpleCursorAdapter { 

    private static final String TAG = "OrderListAdapter"; 
    Context _context = null; 
    int layoutResourceId = 0; 

    /** 
    * Constructor 
    * @param context - Context 
    * @param layout - Layout 
    * @param c - Cursor 
    * @param from - String array with column names 
    * @param to - Int array with destination field ids 
    * @param flags - Integer with flags 
    */ 
    public OrderListAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to, int flags) { 
     super(context, layout, c, from, to, flags); 
     _context = context; 
    } 

    /** 
    * This override version changes the color of the background of the 
    * row based on the order status. 
    */ 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     if (view == null) { 
      LayoutInflater inflater = ((Activity)_context).getLayoutInflater(); 
      view = inflater.inflate(R.layout.fragment_order_list_row, null); 
     } 
     setRowColor(view); 
     return view; 
    } 

    private void setRowColor(View view) { 
     Cursor cursor = getCursor(); 
     int col = cursor 
       .getColumnIndex(DBContract.DeliveryOrderTable.ENROUTE_FLAG); 
     String enroute_flag = cursor.getString(col); 
     col = cursor 
       .getColumnIndex(DBContract.DeliveryOrderTable.DELIVERED_DATETIME); 
     String deliveredDateStr = cursor.getString(col); 
     int bgColorId = 0; 
     if (!deliveredDateStr.equals("")) { 
      bgColorId = R.color.bg_status_delivered_color; 
     } else if (enroute_flag.startsWith("t") || enroute_flag.startsWith("y")) { 
      bgColorId = R.color.bg_status_enroute_color; 
     } else { 
      bgColorId = R.color.bg_status_assigned_color; 
     } 
     view.setBackgroundColor(_context.getResources().getColor(bgColorId)); 

    } // setRowColor() 

    ///// DEBUG 

    @Override 
    public void notifyDataSetChanged() { 
     String tag = TAG + ".notifyDataSetChanged()"; 
     Log.d(tag,"DATA SET CHANGE NOTIFICATION!"); 
     if (Looper.getMainLooper().getThread() == Thread.currentThread()) { 
      Log.d(tag,"On GUI thread!"); 
     } else { 
      Log.d(tag,"NOT on GUI thread!"); 
     } 
     super.notifyDataSetChanged(); 
    } 

} // class 

回答

相关问题