【问题标题】:How to remove all views and add again?如何删除所有视图并重新添加?
【发布时间】:2016-05-15 12:34:52
【问题描述】:

我正在创建视图来显示事件。我正在从数据库中检索记录并根据记录显示事件。现在正在创建事件。

现在我想在删除记录时删除视图。现在,如果我删除记录,那么视图也会在片段中创建。

我在添加和删除记录时添加了事件活动。记录在数据库中被删除,完成后我仍然可以看到视图();活动。

创建视图:

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

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


    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);
    removeView();
    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++;
    }

}

试图删除视图:

  public void removeView()
{
    ArrayList<View> list = new ArrayList<View>();

    for(int i=0; i<list.size(); i++)
    {
        dayplanView.removeAllViews();
    }
}

dayplanview 是ViewGroup

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

我仍然可以看到风景。请问怎么了?

编辑:

例外:

java.lang.RuntimeException: 传递结果 ResultInfo{who=null, request=131073, result=-1, data=Intent { cmp=com.example.siddhi.timetablelayout/.AddEventActivity (has extras) }} 失败活动 {com.example.siddhi.timetablelayout/com.example.siddhi.timetablelayout.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.RelativeLayout.removeAllViews()' 02-05 08:02:37.871 29485-29485/com.example.siddhi.timetablelayout E/AndroidRuntime: 在 android.app.ActivityThread.deliverResults(ActivityThread.java:3574)

at : parent.removeAllViews();

【问题讨论】:

  • 删除arraylist和for循环。
  • 你为什么不使用ListView

标签: java android android-view removechild removeall


【解决方案1】:

你不需要做 dayplanView.removeAllViews();在一个 for 循环中。从您的代码看来,甚至没有输入 for 循环,因为列表的大小为 0。这就是您所需要的:

public void removeView()
{
    dayplanView.removeAllViews();
}

【讨论】:

  • 你能打印堆栈跟踪吗?你从哪里得到它?
  • 你必须在 findViewById() 之后做 removeAllViews()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多