如何获取事件时间表的颜色?
Posted
技术标签:
【中文标题】如何获取事件时间表的颜色?【英文标题】:How to get color of time table on events? 【发布时间】:2016-03-06 14:51:46 【问题描述】:我正在创建一个事件。我也在创建时间表。事件是根据时间表 ID 创建的。我为显示事件而创建的动态事件视图。
我为此事件和时间表创建了两个表。并从数据库加载事件。 现在我已经加载了时间表女巫启用的事件。我已经为时间表设置了颜色。我想在具有尊重时间表 ID 的事件上显示此颜色。
我尝试使用时间表的对象加载此颜色。
但我使用了 for 循环,因此它会向所有事件显示上次时间表的颜色。
如何为具有尊重时间表 ID 的事件设置颜色?
星期一片段:
public class Mon extends Fragment
private EventTableHelper mDb;
private Intent i;
private ViewGroup dayplanView;
private int minutesFrom,minutesTo;
private List<EventData> events;
private List<View> list;
private List<TimeTable> tables;
private LayoutInflater inflater;
public boolean editMode;
private RelativeLayout container;
private View eventView;
private TimeTableHelper tableHelper;
int color;
private boolean mCheckFragment;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view = inflater.inflate(R.layout.fragment_mon, container, false);
list = new ArrayList<View>();
dayplanView = (ViewGroup) view.findViewById(R.id.hoursRelativeLayout);
showEvents();
mCheckFragment = true;
return view;
private void createEvent(LayoutInflater inflater, ViewGroup dayplanView, int fromMinutes, int toMinutes, String title,String location,final int id,int color,String notification)
eventView = inflater.inflate(R.layout.event_view, dayplanView, false);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) eventView.getLayoutParams();
container = (RelativeLayout) eventView.findViewById(R.id.container);
TextView tvTitle = (TextView) eventView.findViewById(R.id.textViewTitle);
list.add(eventView);
ImageView notify = (ImageView) eventView.findViewById(R.id.notify);
((GradientDrawable) eventView.getBackground()).setColor(color);
tvTitle.setTextColor(Color.parseColor("#FFFFFF"));
if (tvTitle.getParent() != null)
((ViewGroup) tvTitle.getParent()).removeView(tvTitle);
if(notification == null)
notify.setVisibility(View.GONE);
else
notify.setVisibility(View.VISIBLE);
if(location.equals(""))
tvTitle.setText("Event : " + title);
else
tvTitle.setText("Event : " + title + " (At : " + location +")");
int distance = (toMinutes - fromMinutes);
layoutParams.topMargin = dpToPixels(fromMinutes + 9);
layoutParams.height = dpToPixels(distance);
eventView.setLayoutParams(layoutParams);
dayplanView.addView(eventView);
container.addView(tvTitle);
eventView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
i = new Intent(getActivity(), AddEventActivity.class);
editMode = true;
i.putExtra("EditMode", editMode);
i.putExtra("id", id);
startActivityForResult(i, 1);
);
public void showEvents()
tableHelper = new TimeTableHelper(getActivity());
tables = tableHelper.getAllTables();
for (TimeTable table : tables)
int tableId = table.getId();
int status = table.getStatus();
if(status == 1)
color = table.getTableColor();
mDb = new EventTableHelper(getActivity());
events = mDb.getTimeTableEvents("Mon", tableId);
for (EventData eventData : events)
int id = eventData.getId();
String datefrom = eventData.getFromDate();
if (datefrom != null)
String[] times = datefrom.substring(11, 16).split(":");
minutesFrom = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
String title = eventData.getTitle();
String location = eventData.getLocation();
String dateTo = eventData.getToDate();
String notification = eventData.getNotificationTime();
if (dateTo != null)
//times = dateTo.substring(11,16).split(":");
String[] times1 = dateTo.substring(11, 16).split(":");
minutesTo = Integer.parseInt(times1[0]) * 60 + Integer.parseInt(times1[1]);
createEvent(inflater, dayplanView, minutesFrom, minutesTo, title, location, id, color, notification);
id++;
public void removeView()
for(int i=0; i<list.size(); i++)
View view = (View)list.get(i);
dayplanView.removeView(view);
private int dpToPixels(int dp)
return (int) (dp * getResources().getDisplayMetrics().density);
@Override
public void onResume()
super.onResume();
if(mCheckFragment)
removeView();
showEvents();
编辑:
public void showEvents()
tableHelper = new TimeTableHelper(getActivity());
tables = tableHelper.getAllTables();
int color = 0;
for (TimeTable table : tables)
int tableId = table.getId();
int status = table.getStatus();
mDb = new EventTableHelper(getActivity());
events = mDb.getTimeTableEvents("Mon", tableId);
for (EventData eventData : events)
int id = eventData.getId();
String datefrom = eventData.getFromDate();
if (datefrom != null)
String[] times = datefrom.substring(11, 16).split(":");
minutesFrom = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
String title = eventData.getTitle();
String location = eventData.getLocation();
String dateTo = eventData.getToDate();
color = table.getTableColor();
String notification = eventData.getNotificationTime();
if (dateTo != null)
//times = dateTo.substring(11,16).split(":");
String[] times1 = dateTo.substring(11, 16).split(":");
minutesTo = Integer.parseInt(times1[0]) * 60 + Integer.parseInt(times1[1]);
createEvent(inflater, dayplanView, minutesFrom, minutesTo, title, location, id, color, notification);
id++;
谢谢你..
【问题讨论】:
【参考方案1】:尝试将两个 for 循环合并在一起,看看是否可行。 除了颜色,当它进入第二个 for 循环时,看起来事件也被设置为最后一个表。
for(TimeTable table : tables)
// code from table for loop
// ...
for(EventData eventData : events)
// code from event for loop.
// ...
【讨论】:
是的,我也这么认为并尝试了这个。但仍然没有帮助。请检查已编辑的问题。 @DMO-NZ 最后一行,为什么要增加id?它被重置为下一个 eventData 的 id.. 只是想知道.. 这重要吗? 不,实际上我之前尝试过不同的方法来设置 ID。忘记删除了。它从未使用过。 在原来的for循环中,你在设置颜色之前检查了表格的状态; 是的,我试着检查是否有任何区别,如果我喜欢这样做,但结果是一样的。以上是关于如何获取事件时间表的颜色?的主要内容,如果未能解决你的问题,请参考以下文章