2015-08-12 4 views
1

Первый раз здесь и довольно новый для Android. У меня проблема с цветом фона на моей странице «События».Цвет фона Android не отображается правильно

Предполагается, что фон времени будет чередоваться между темно-коричневым и светло-коричневым, когда отображается новое время, но по какой-то причине оно работает иногда и не работает в других случаях.

Когда приложение отображает его неправильно, оно либо останется на том же оттенке коричневого цвета, когда время изменится, либо изменит оттенок коричневого цвета, когда он останется неизменным. Я не уверен, что вызывает это.

Данные получены из файла json, размещенного на сервере. Данные загружаются в класс AsyncTask, и приложение будет ожидать загрузки данных до того, как пользователь достигнет страницы событий. Появится сообщение с сообщением «Подождите, пока данные будут загружены», если пользователь нажмет события.

Вот пример того, что одна из записей выглядят следующим образом:

{ 
    "title": "Some_Title", 
    "description": "Some_Description\n", 
    "times": [ 
    { 
     "startTime": "2014-09-20 09:30:00", 
     "endTime": "2014-09-20 10:30:00" 
    }, 
    { 
     "startTime": "2014-09-20 11:00:00", 
     "endTime": "2014-09-20 12:00:00" 
    }, 
    { 
     "startTime": "2014-09-20 13:00:00", 
     "endTime": "2014-09-20 14:00:00" 
    } 
    ], 
    "locationTitle": "Some_Location", 
    "locationLat": ##.######, 
    "locationLng": -###.######, 
    "typeX": 0, 
    "typeY": true, 
    "typeZ": false, 
    "typeA": false, 
    "typeB": false, 
    "typeC": false, 
    "SpreadsheetName": "Some_Name\n(A_Location)" 
}, 

Цвет обрабатывается в классе адаптера. Вот код, который обрабатывает цвет фона и скриншот страницы событий работает, а также журнал:

public class EventScheduleAdapter extends BaseAdapter { 

private final ArrayList<Event> events; 
private final Context context; 
private final ArrayList<Integer> holders; 

public EventScheduleAdapter(Context context, boolean[] types, Calendar day) { 
    this.context = context; 
    this.events = EventList.getInstance().getFilteredEvents(day, types); 
    holders = new ArrayList<Integer>(); 
} 

@Override 
public int getCount() { 
    return events.size(); 
} 

@Override 
public Object getItem(int i) { 
    return events.get(i); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup viewGroup) { 
    Event event = events.get(position); 
    View vi = convertView; 
    ViewHolder holder; 
    //ImageView image = new ImageView(this.context); 
    //FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT); 
    //params.setMargins(20, 20, 20, 20); 

    if (convertView == null) { 
     vi = View.inflate(context, R.layout.event_list_item, null); 
     holder = new ViewHolder(); 
     holder.time = (TextView) vi.findViewById(R.id.timeNumber); 
     holder.am = (TextView) vi.findViewById(R.id.timeAM); 
     holder.title = (TextView) vi.findViewById(R.id.title); 
     holder.location = (TextView) vi.findViewById(R.id.location); 
     //holder.description = (TextView) vi.findViewById(R.id.description); 
     holder.color = (LinearLayout) vi.findViewById(R.id.color); 
     holder.timeBackground = (RelativeLayout) vi.findViewById(R.id.time); 
     //holder.image = (ImageView) vi.findViewById(R.id.tag_A); 
     vi.setTag(holder); 
    } else { 
     holder = (ViewHolder) vi.getTag(); 
    } 

    if(event.getStartTime() != null && (position == 0 || !EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime()))) { 
     holder.time.setText(String.format("%tl:%tM", event.getStartTime(), event.getStartTime())); 
     holder.am.setText(String.format("%Tp", event.getStartTime())); 
    } else { 
     holder.time.setText(""); 
     holder.am.setText(""); 
    } 
    Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/main.ttf"); 
    holder.title.setText(event.getTitle()); 
    holder.title.setTypeface(font); 
    holder.location.setText(event.getLocationTitle()); 
    holder.location.setTypeface(font); 
    //holder.description.setText(event.getDescription()); 
    //holder.description.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/description.ttf")); 
    holder.color.removeAllViews(); 
    if(event.isTypeA()) { 
     holder.color.addView(newColorView(R.drawable.tag_A)); 
    } if(event.isTypeB()) { 
     holder.color.addView(newColorView(R.drawable.tag_B)); 
    } if(event.isTypeC()) { 
     holder.color.addView(newColorView(R.drawable.tag_C)); 
    } if(event.isTypeD()) { 
     holder.color.addView(newColorView(R.drawable.tag_D)); 
    } if(event.isTypeE()) { 
     holder.color.addView(newColorView(R.drawable.tag_E)); 
    } 

    if (position != 0) { 
     Log.i("EventScheduleAdapter", "position " + position + "event @ position: " + event.getTitle()); 
     if (!EventList.isSameTime(event.getStartTime(), events.get(position - 1).getStartTime())) { 
      Log.i("EventScheduleAdapter", "Same time is FALSE"); 
      if(holders.get(position - 1) == R.color.background_event_dark) { 
       Log.i("EventScheduleAdapter", "Different Color LIGHT"); 
       holder.timeColor = R.color.background_event_light; 
       holders.add(holder.timeColor); 
       Log.i("EventScheduleAdapter", "position Color" + holders.get(position)); 
      } else { 
       Log.i("EventScheduleAdapter", "Different Color DARK"); 
       holder.timeColor = R.color.background_event_dark; 
       holders.add(holder.timeColor); 
       Log.i("EventScheduleAdapter", "position Color" + holders.get(position)); 
      } 
     } else { 
      Log.i("EventScheduleAdapter", "Same time is TRUE"); 
      holder.timeColor = holders.get(position - 1); 
      // holder. 
      //holder.timeColor = holder.get(position-1) 
      if (holder.timeColor == R.color.background_event_dark) 
       Log.i("EventScheduleAdapter", "SAME COLOR IS DARK"); 
      if (holder.timeColor == R.color.background_event_light) 
       Log.i("EventScheduleAdapter", "SAME COLOR IS LIGHT"); 
      holders.add(holder.timeColor); 
      Log.i("EventScheduleAdapter", "position Color" + holders.get(position)); 
     } 
    } else { 
     Log.i("EventScheduleAdapter", "Position is 0"); 
     holder.timeColor = R.color.background_event_dark; 
     holders.add(holder.timeColor); 
    } 

    holder.timeBackground.setBackgroundColor(context.getResources().getColor(holder.timeColor)); 
    return vi; 
} 

/* Circle newColorView(int color) { 
    Circle layout = new Circle(context); 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, 50); 
    params.setMargins(5, 5, 5, 5); 
    layout.setLayoutParams(params); 
    layout.setColor(color); 
    return layout; 
} */ 

ImageView newColorView(int drawable) { 
    ImageView layout = new ImageView(context); // put drawable in here 
    LinearLayout.LayoutParams params; 
    if (drawable == R.drawable.tag_cp) { 
     params = new LinearLayout.LayoutParams(78, 50); 
    } 
    else if (drawable == R.drawable.tag_slo) { 
     params = new LinearLayout.LayoutParams(100, 50); 
    } 
    else { 
     params = new LinearLayout.LayoutParams(50, 50); 
    } 
    params.setMargins(5, 5, 5, 5); 
    layout.setLayoutParams(params); 
    layout.setImageResource(drawable); 
    return layout; 
} 

class ViewHolder { 
    int timeColor; 
    RelativeLayout timeBackground; 
    TextView time; 
    TextView am; 
    TextView title; 
    TextView location; 
    //TextView description; 
    LinearLayout color; 
} 
} 

я не могу добавлять изображения, так как я новый член :(Но я буду, как только Я могу

+1

Я забыл упомянуть, что в журналах казалось, что фоны были визуализированы, когда пользователь прокручивает список событий. – rhlin888

ответ

0

вы продолжаете добавлять к вашим holders массивы с каждым элементом вы создаете. Так что если вы попросили нарисовать item0 3 раза и iTEM1 3 раза, вы в конечном итоге 6 записей в массиве. Рассмотрим с помощью sparse array или int[]. И например, когда вам предлагается создать представление для позиции X, вы делаете:

holders[X] = myColorId; 
+1

Большое спасибо! Кажется, что сработало, но ошибка происходит случайным образом, поэтому ее трудно реплицировать. Я испытаю это более тщательно завтра утром! – rhlin888

Смежные вопросы