2016-02-05 47 views
-2

我正在创建动态视图。我想添加意见列表并删除它们onActivityResult。列表视图上的空指针异常

但是当我将视图添加到列表中时,我得到了列表视图上的NullPointerException。

我应该在列表视图中添加视图?

这里是我的代码:

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 List<View> list; 
    private EventData e; 
    private LayoutInflater inflater; 
    public boolean editMode; 
    private RelativeLayout container; 
    RelativeLayout parent; 
    View eventView; 
    @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) { 

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

      } 
     }); 
    } 

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

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

      list.add(eventView); 
     } 
    } 

    public void removeView() 
    { 
     for(int i=0; i<list.size(); i++) 
     { 
      dayplanView.removeView(eventView); 
     } 
    } 

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

} 

在list.add(使用EventView)获取例外; 请帮助..

回答

0

你的列表永远不会初始化,当你回来的结果是试图将元素添加到一个空引用列表

解决方案:

onCreate

做:

list = new ArrayList<View>(); 
+0

哎呀..很棒。谢谢.. – user5881997