我在各种网站上研究了这个问题,这里有关于堆栈溢出的问题,但我找不到解决我问题的解决方案。我现在正在努力解决这个问题已经有一段时间了但是无法解决它..
我有两个活动和一个片段。
第一个Activity(概述)应该使用不同的文本添加片段在onCreate中,然后使用默认文本。第二个Activity(AddCity)使用Intent和Bundle将此文本数据发送到Overview。在概述中,数据可用,我使用myfragment.setArguments(bundle)
将其发送到片段,但是当我尝试使用Bundle bundle = getArguments()
访问onCreateView中的Textview时,我收到以下错误:
FATAL EXCEPTION: main
Process: com.myapp.www, PID: 19690
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
异常发生在StatusFragment中的以下行:
TextView cityText = (TextView) getView().findViewById(R.id.city_name);
我已经尝试过使用自己的构造函数的方法,但据我所知,你应该避免使用除片段中的空默认构造函数之外的自定义构造函数,而且它也不起作用。
我的课程是:
概述:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overview);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setIcon(R.drawable.myicon);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
if(getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();
StatusFragment newFragment = new StatusFragment();
newFragment.setArguments(extras);
mSectionsPagerAdapter.addFragment(newFragment, extras.getString("city"));
}else{
Log.w("Overview-Bundle", "No Bundle Data");
}
mViewPager.setAdapter(mSectionsPagerAdapter);
}
AddCity:
此类使用一种方法接收JSON字符串并解析它以获取我需要发送给片段的数据。这工作正常,所以我只给出了我把Intent放在一起的相关代码。 obj是JSON对象。 (如果您需要更多代码,请告诉我们)
Intent i = new Intent(AddCity.this, Overview.class);
Bundle bundle = new Bundle();
bundle.putString("city", obj.getString("user_city"));
bundle.putString("country", obj.getString("user_ country"));
i.putExtras(bundle);
startActivity(i);
StatusFragment:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_for_overview, null);
setUI(view);
return view;
}
public void setUI(View view){
if(getArguments() != null) {
Bundle bundle = getArguments();
String city = bundle.getString("city");
String country = bundle.getString("country");
TextView cityText = (TextView) getView().findViewById(R.id.city_name);
TextView countryText = (TextView) getView().findViewById(R.id.country_name);
cityText.setText(city);
countryText.setText(country);
}else{
Log.w("Arguments", "no arguments");
}
}
我会感激每一个答案。如果我发布更多代码,请告诉我。
答案 0 :(得分:2)
您在getView()
返回之前调用onCreateView()
,因此为空指针。在您的情况下,您只需致电:
public void setUI(View view){
...
TextView cityText = (TextView) view.findViewById(R.id.city_name);
...
}