java - 如何获取 Activity 时间表的颜色?

标签 java android dynamic view colors

我正在创建一个事件。我也在创建时间表。事件是根据时间表 ID 创建的。我创建的动态事件 View 是为了显示事件。

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

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

但是我使用了 for 循环,因此它向所有事件显示最后一个时间表的颜色。

如何为具有相关时间表 ID 的事件设置颜色?

周一 fragment :

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++;
        }

    }
}

谢谢你..

最佳答案

尝试将两个 for 循环合并在一起,看看是否有效。 除了颜色之外,当进入第二个 for 循环时,事件看起来也被设置到最后一个表。

    for(TimeTable table : tables) {
        // code from table for loop
        // ...
        for(EventData eventData : events) {
            // code from event for loop.
            // ...
        }
    }

关于java - 如何获取 Activity 时间表的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828319/

相关文章:

java - 如何从具有接口(interface)引用的类中获取简单的类名?

java - 如何告诉 eclipse 从 maven repo 读取 javadocs?

android - 给定一个 Android 音乐播放列表名称,如何找到播放列表中的歌曲?

java - 验证类错误

javascript/jquery - 按 id 动态添加数据到数组

java - 在 Scanner.useDelimiter() 中使用正则表达式时出现额外的空白

android - Stripe、Judo Payments 和 Braintree 之间有什么区别?

C++:双指针的动态初始化

excel - 当单元格可能不同时,Powershell excel 合并单元格

java - 我想学习如何为 selenium java 定制 xpath