I am a beginner. I am programming a weather app in android. I want to call fragment method in activity, but it have a error
And my main activity code here:
public class MainActivity extends FragmentActivity {
ViewPager viewpager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager = (ViewPager)findViewById(R.id.viewPager);
MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager());
viewpager.setAdapter(adapter);
}
private class MyFragmentAdapter extends FragmentPagerAdapter{
public MyFragmentAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
switch (position) {
case 0:
return new WeatherCurrentFragment();
case 1:
return new WeatherForeCastFragment();
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 2;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.weather, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
if(item.getItemId() == R.id.change_city){
showInputDialog();
}
return super.onOptionsItemSelected(item);
}
private void showInputDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Change city");
final EditText input = new EditText(this);
input.setInputType(InputType.TYPE_CLASS_TEXT);
builder.setView(input);
builder.setPositiveButton("Go", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
changeCity(input.getText().toString());
}
});
builder.show();
}
public void changeCity(String city){
WeatherCurrentFragment cf = (WeatherCurrentFragment)getSupportFragmentManager().findFragmentById(R.id.currentweather);
cf.updateWeatherData(city);
WeatherForeCastFragment ff = (WeatherForeCastFragmen)getSupportFragmentManager().findFragmentById(R.id.forecast);
ff.updateWeatherData(city);
new CityPreference(this).setCity(city);
}
}
And is show an error
07-18 08:59:34.755: E/AndroidRuntime(2114): java.lang.NullPointerException: Attempt to invoke virtual method 'void example.giaodien1.WeatherCurrentFragment.updateWeatherData(java.lang.String)' on a null object reference
As you see I want to call method one from CurrentWeatherFragment and one from ForecastWeatherFragment when I click button.