상태가 다른 SQLite 주문 목록이 있습니다 : 할당 됨,로드 됨, 배달 됨. 목록에 표시 될 때 각 주문에 대해 다른 색칠 된 배경을 갖고 싶습니다. 지금까지 나는 이것을 할 수있는 좋은 방법을 찾지 못했습니다.각 항목에 표시되는 데이터를 기반으로 목록 항목의 배경색을 변경하려면 어떻게해야합니까?
위치를 기준으로 목록 항목의 배경색을 변경하는 방법에 대해서는 많은 논의가 있었지만 데이터 내용은 기반으로하지 않았습니다. 선택한 항목을 강조 표시하는 데 사용되는 색상을 변경하는 방법에 대한 토론도 많이있었습니다. 이것들은 나를 도와주지 않습니다.
내 문제를 해결하기 위해 생각해내는 유일한 방법은 전체 목록을 실행하고, 어댑터에 의해 생성 된 후 각 항목에 배경을 설정하는 것입니다. 응석과 낭비. 목록이 커서에서 생성 될 때 어댑터에서 배경을 변경할 수있는보다 효율적인 방법이 필요합니다.
더 좋은 방법이있을 것입니다. 나는 그것을 알기 위해 안드로이드에 너무 새롭다.
정말 고맙습니다. 나는 그들을 통합하기 위해 최선을 다하고 있지만, 나는 아직 성공하지 못하고있다. 여기에 내가 얻은 답과 내가 한 연구에 기초하여 방금 시도한 것이 있습니다.
public class OrderListAdapter extends SimpleCursorAdapter {
private static final String TAG = "SimpleCursorAdapter";
Context _context = null;
int layoutResourceId = 0;
public OrderListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
_context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
String tag = TAG + ".getView()";
Log.d(tag,"in getView()");
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) {
String tag = TAG + ".setRowColor()";
Cursor cursor = getCursor();
int col = cursor
.getColumnIndex(DBContract.DeliveryOrderTable.ENROUTE_FLAG);
String enroute_flag = cursor.getString(col);
Log.d(tag, "enroute_flag = [" + enroute_flag + "]");
col = cursor
.getColumnIndex(DBContract.DeliveryOrderTable.DELIVERED_DATETIME);
String deliveredDateStr = cursor.getString(col);
Log.d(tag, "deliveredDateStr = [" + deliveredDateStr + "]");
int bgColorId = 0;
if (!deliveredDateStr.equals("")) {
bgColorId = R.color.bg_status_delivered_color;
Log.d(tag, "Setting to delivered color");
} else if (enroute_flag.startsWith("T") || enroute_flag.startsWith("Y")) {
Log.d(tag, "Setting to enroute color");
bgColorId = R.color.bg_status_enroute_color;
} else {
Log.d(tag, "Setting to assigned color");
bgColorId = R.color.bg_status_assigned_color;
}
view.setBackgroundColor(_context.getResources().getColor(bgColorId));
}
}
불행히도, 이것은 작동하지 않습니다. super.getView()를 호출하지 않으면 명시 적으로 전송을하지 않기 때문에 필자는 필드에 데이터가 없다는 것을 알았지 만 반환 된 뷰를 수정할 수 있다고 생각했습니다.
내 흔적은 데이터를 읽었 음을 보여 주지만 배경색은 변함이 없습니다.
변경하려고하는 뷰는 LinearLayout이지만 배경색을 변경하면 작동하지 않는 것으로 보입니다.
알 수 있습니다. 모든 자식 뷰의 배경을 투명하게 만들어야합니다.
가능한 복제 ListView에서 특정 행의 배경색을 어떻게 바꿀 수 있습니까? (Android)] (http://stackoverflow.com/questions/4634796/how-can-i-change-the-background-color-for-an-specific-row-properly-in-a-listview) – Simon
내가 보았다. 저것에. 그러나 행의 데이터가 아니라보기가있는 위치에 따라 색상을 변경하는 것처럼 보입니다. 그것은 내가 일하고 있다는 아이디어를 주었기 때문에 해결책이 될 수는 있겠지만 필요한 것이 아닙니다. – Rben
다른 가능한 해결책으로 [속성에 따라 배경색 변경] (http://stackoverflow.com/questions/13967788/change-background-color-based-on-property)도 조사하고 있습니다. 어댑터의 작동 방식에 대해 자세히 알아보십시오. – Rben