2016-05-05 120 views
0

我试图更新来自activity.And片段的意见,我得到nullpointerException。无法访问外部onCreateView()

public class MyFragment extends Fragment { 

TextView tv_date, tv_memo_title; 

public MyFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    view = inflater.inflate(R.layout.fragment_day_summary, container, false); 
    tv_date = (TextView) view.findViewById(R.id.tv_date); 
    tv_memo_title = (TextView) view.findViewById(R.id.tv_memo_title); 

    SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd yyyy"); 
    //get current date time with Date() 
    Date date = new Date(); 
    day = dateFormat.format(date); 

    setSummary(day); 

    return view; 
} 




public void setSummary(String day) { 


    tv_date.setText(this.day); 
    tv_memo_title.setText(äbcd"); 
} 

public void setSummary(MyData myData) { 


    tv_date.setText(""+myData.getDate()); 
    tv_memo_title.setText(""+myData.getDate()); 

} 
} 

我从我的FragmentActivity调用公共无效setSummary(迈德特MYDATA的)以更新片段的数据。

在这里我得到像下面这样的空指针异常。

显示java.lang.NullPointerException:尝试上的空对象引用

public class SummaryActivity extends FragmentActivity { 


public View onCreateView(String name, @NonNull Context context, @NonNull AttributeSet attrs) { 
    return super.onCreateView(name, context, attrs); 
} 

/** 
* Dispatch to Fragment.onCreateOptionsMenu(). 
* 
* @param featureId 
* @param menu 
*/ 
@Override 
public boolean onCreatePanelMenu(int featureId, Menu menu) { 
    return super.onCreatePanelMenu(featureId, menu); 
} 

Calendar cal = Calendar.getInstance(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mContext = this; 
    setContentView(R.layout.activity_summary); 
    cal.set(Calendar.YEAR, 2016); 
    cal.set(Calendar.MONTH, 02); 
    cal.set(Calendar.DAY_OF_MONTH, 01); 
    // Locate the viewpager in activity_main.xml 
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    String[] titles = {mContext.getString(R.string.TITLE_SUMMARY), mContext.getString(R.string.SUMMARY_ITEM_1), mContext.getString(R.string.SUMMARY_ITEM_2), mContext.getString(R.string.SUMMARY_ITEM_3), mContext.getString(R.string.SUMMARY_ITEM_4)}; 
    // Set the SummaryViewPagerAdapter into ViewPager 
    viewPager.setAdapter(new SummaryViewPagerAdapter(getSupportFragmentManager(), mContext, titles)); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    switch (keyCode) { 


     case KeyEvent.KEYCODE_VOLUME_DOWN: 

      cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) - 24); 
      String prevDay = (cal.get(Calendar.MONTH) + 1) + "/" + (cal.get(Calendar.DAY_OF_MONTH)) + "/" + cal.get(Calendar.YEAR); 
      int topFragment = getSupportFragmentManager().getFragments().size() - 2; 
      if (getSupportFragmentManager().getFragments().get(topFragment) instanceof DaySummaryFragment) { 
       myData = DBWrapper.getAllData(prevDay, mContext); 
       myFragment.setSummary(myData); 

      } 
      break; 
     case KeyEvent.KEYCODE_VOLUME_UP: 

      cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + 24); 
      String nextDay = (cal.get(Calendar.MONTH) + 1) + "/" + (cal.get(Calendar.DAY_OF_MONTH)) + "/" + cal.get(Calendar.YEAR); 
      topFragment = getSupportFragmentManager().getFragments().size() - 2; 

      if (getSupportFragmentManager().getFragments().get(topFragment) instanceof DaySummaryFragment) { 

       myData = DBWrapper.getAllData(prevDay, mContext); 
       myFragment.setSummary(myData); 
      }    break; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

}

+0

你能说明你到底是如何得到你的活动中MyFragment的实例的参考吗? – user35603

+0

你不清楚你如何将Fragment添加到活动中。您是否在XML中这样做? –

+0

是的,我用xml的 – KCRaju

回答

0
调用虚拟方法android.view.View android.view.View.findViewById(INT)'

当你膨胀的观点你要做的

View view = inflater.inflate(R.layout.fragment_day_summary, container, false); 
return view; 

这样,你得到空指针Exseption

+0

即使我也以这种方式尝试。最初我的代码就是这样。后来尝试在外部使用'视图'对象,我声明为公开 – KCRaju

0

Fragment的视图创建之前,您可以致电setSummary。你在ActivityonCreate方法中调用它吗?

+0

不,我在FragmentActivity中调用onKeyDown() – KCRaju

+1

你能发布你的Activity的代码吗? –

+0

活动代码已添加 – KCRaju