2016-03-06 50 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