Я создаю приложение, которое показывает транспортные средства в области, у него есть 3-страничный ViewPager только с одним фрагментом (я не хотел создавать много фрагментов для всех 3 транспортных средств, которые у меня сейчас есть) , но моя проблема в том, что я хочу иметь доступ к кнопке фрагментов в MainActivity, чтобы при нажатии на нее вызывался объект GoogleMap, который находится в MainActivity, и я мог отображать маркеры или даже иметь доступ к объекту GoogleMap в моем фрагменте ( даже лучше) так что я могу манипулировать им так, как хочу, но любой код, который я пишу, дает мне нулевой указатель на кнопку.
Это основной класс:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottom_view_on_successful_pick_layout = findViewById(R.id.bottom_view_on_successful_pick_layout);
GoogleApiClient = new GoogleApiClient
.Builder(this)
.addApi(Places.GEO_DATA_API)
.addApi(Places.PLACE_DETECTION_API)
.enableAutoManage(this, this)
.build();
autoCompleteAdapter = new PlaceAutocompleteAdapter(this, Places.getGeoDataClient(this, null), LAT_LNG_BOUNDS, null);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
RideOptionFragment rideOptionFragment = RideOptionFragment.newInstance(new RideOption("cars", "1"));
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(MainActivity.this);
ViewPager viewPager = findViewById(R.id.ride_option_ViewPager);
rideOptionPageAdapter = new RideOptionPageAdapter(getSupportFragmentManager(),cc);
viewPager.setAdapter(rideOptionPageAdapter);
rideOptionFragment.rideRequestBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do somthing to google map ere
}
});
}
Это адаптер опции поездки:
public class RideOptionPageAdapter extends FragmentPagerAdapter {
public int position = 0;
public RideOption[] rideOptions = {
new RideOption("car", "1"),
new RideOption("biycle", "2"),
new RideOption("boat", "3")
};
public RideOptionFragment rof;
public RideOptionPageAdapter(FragmentManager fm, RideOptionFragment rr){
super(fm);
rof = rr;
}
@Override
public int getCount() {
return rideOptions.length;
}
@Override
public Fragment getItem(int position) {
rof = RideOptionFragment.newInstance(rideOptions[position]);
return rof;
}
}
Это мой фрагмент:
RideOption rideOption = new RideOption("pullova", "pullova_");
CircleImageView circleImageView;
публичная кнопка rideRequestBtn;
public static RideOptionFragment newInstance(RideOption rideOption) {
RideOptionFragment rideOptionFragment = new RideOptionFragment();
rideOptionFragment.rideOption = rideOption;
return rideOptionFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.ride_option_layout, container, false);
rideRequestBtn = view.findViewById(R.id.ride_request);
circleImageView = view.findViewById(R.id.pullova_ride_option_image);
circleImageView.setImageDrawable(getResources().getDrawable(getResources().getIdentifier(rideOption.getImage_URL(), "drawable", getActivity().getPackageName())));
rideRequestBtn.setText(rideOption.getName());
return view;
}
Это ошибка, которую я получаю:
Причина: java.lang.NullPointerException: попытка вызвать виртуальную
метод void
android.widget.Button.setOnClickListener (android.view.View $ OnClickListener)»
на нулевой ссылке на объект
в com.pullova.pullovatechnologies.pullovaandroidproject.MainActivity.onCreate (MainActivity.java:228)
на android.app.Activity.performCreate (Activity.java:6664)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1118)
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2599)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2707)
на android.app.ActivityThread.-wrap12 (ActivityThread.java)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1460)
на android.os.Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:154)
на android.app.ActivityThread.main (ActivityThread.java:6077)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:865)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:755) W / art:
Проверка