如何刷新动态创建的视图?

时间:2016-02-05 09:17:29

标签: java android database refresh dynamic-view

我创建了动态视图来显示事件。我将事件存储在数据库中。

这些事件我从数据库中检索并加载到片段中。事件正在成功创建。

现在我要删除这些事件。当我在另一个活动中删除该事件时,该记录将从数据库中删除,但事件仍以片段形式显示。

我尝试在viewgroup和view上使用invalidate()但是dint得到任何结果。

如何更新?

片段代码:

public class Mon extends Fragment {

    private FrameLayout fab;
    private EventTableHelper mDb;
    private Intent i;
    private ViewGroup dayplanView;
    private int minutesFrom,minutesTo;
    private List<EventData> events;
    private EventData e;
    private LayoutInflater inflater;
    public  boolean editMode;

    @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);

        fab = (FrameLayout) view.findViewById(R.id.main_fab);
        ImageButton imageButton = (ImageButton) view.findViewById(R.id.imgbtn_fab);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                i = new Intent(getActivity(), AddEventActivity.class);
                editMode = false;
                i.putExtra("EditMode",editMode);
                startActivityForResult(i, 1);
            }
        });

        dayplanView = (ViewGroup) view.findViewById(R.id.hoursRelativeLayout);

        showEvents();

        return view;
    }

    private void createEvent(LayoutInflater inflater, ViewGroup dayplanView, int fromMinutes, int toMinutes, String title,String location,final int id) {
        final View eventView = inflater.inflate(R.layout.event_view, dayplanView, false);
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) eventView.getLayoutParams();

        RelativeLayout container = (RelativeLayout) eventView.findViewById(R.id.container);
        TextView tvTitle = (TextView) eventView.findViewById(R.id.textViewTitle);

        dayplanView.invalidate();

        if (tvTitle.getParent() != null)
           ((ViewGroup) tvTitle.getParent()).removeView(tvTitle);

        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.setTag(tag);
        eventView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                i = new Intent(getActivity(),AddEventActivity.class);
                editMode = true;
                i.putExtra("EditMode",editMode);
                int tag = 0;
              //  tag =(int)v.getTag();
              //  i.putExtra("tag",tag);
             //   EventData e =new EventData();
               // int id=0;/ id = e.getId();
                i.putExtra("id",id);
                startActivityForResult(i,1);

            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        showEvents();
    }

    public void showEvents()
    {
        mDb = new EventTableHelper(getActivity());
        events = mDb.getAllEvents("Mon");

        int tag = 0;

        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();

            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);
            tag++;
            id++;
        }

    }
    private int dpToPixels(int dp) {
        return (int) (dp * getResources().getDisplayMetrics().density);
    }
}

编辑:

删除其他活动中的按钮代码。

        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                i = new Intent();
                db.deleteEvent(eventData);
                Log.i("d", "delete");
                setResult(RESULT_OK, i);
                finish();

            }
        });

谢谢..

1 个答案:

答案 0 :(得分:0)

从日片段活动的OnResume调用showEvents()方法。这样它就会被刷新,