2016-03-06 55 views
0

我正在创建一个活动。另外我正在创建时间表。事件是基于时间表ID创建的。我创建的动态事件视图显示事件。如何获取事件的时间表颜色?

我为这个事件和时间表创建了两个表。并从数据库加载事件。 现在我已经加载了启用时间表的事件。我为时间表设置了颜色。这种颜色我想在尊重时间表ID上显示事件。

我尝试使用时间表对象加载此颜色。

但我用于循环,所以它显示了上次所有事件的颜色。

如何使用尊重的时间表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(TimeTable table : tables) { 
     // code from table for loop 
     // ... 
     for(EventData eventData : events) { 
      // code from event for loop. 
      // ... 
     } 
    } 
+0

是的,我以为是一样的,试过这个。但仍然没有帮助。请检查编辑的问题。 @ DMO-NZ – user5881997

+0

在最后一行,为什么你增加ID?它重置为下一个eventData的ID ..只是想知道..是否重要? –

+0

实际上我没有尝试过不同的方法来设置一个id之前。忘了删除。它从未使用过。原始for循环中的 – user5881997