У меня есть BusActivity
, в которой я уже знаю значение переменной position
. У нее есть дочерний фрагмент BusStopFragment
, который я создаю в методе SetupViewPager()
. Вопрос состоит в том, как мне передать значение этой переменной position
в метод setInitialData()
этого фрагмента?
Код BusActivity
:
public class BusActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bus);
Intent intent = getIntent();
int position;
int DefaultValue = 0;
position = intent.getIntExtra("EXTRA_POS", DefaultValue);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
if(id == android.R.id.home){
finish();
}
return super.onOptionsItemSelected(item);
}
private void setupViewPager(ViewPager viewPager){
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new BusStopFragment(), "BusStop");
adapter.addFragment(new TableFragment(), "Table");
adapter.addFragment(new MapFragment(), "Map");
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount());
}
}
Код BusStopFragment
:
public class BusStopFragment extends Fragment {
private List<Station> stations = new ArrayList();
ListView stationsList;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setInitialData();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.busstopfragment, container, false);
stationsList = (ListView) view.findViewById(R.id.stationsList);
Activity activity = new Activity();
StationAdapter stationAdapter = new StationAdapter(getActivity().getApplicationContext(), R.layout.list_item, stations);
stationsList.setAdapter(stationAdapter);
return view;
}
private void setInitialData(){
stations.add(new Station("01", "10 grn", R.drawable.ic_launcher_background));
stations.add(new Station("02", "15 grn", R.drawable.ic_launcher_background));
stations.add(new Station("03", "20 grn", R.drawable.ic_launcher_background));
}
}
Создайте интерфейс, который будет реализован вашим активити.
public interface Busable{
int getPosition();
Добавьте наследование и реализуйте метод getPosition()
public class BusActivity extends AppCompatActivity implements Busable{
public int getPosition(){
return position; // position - перенесите на уровень класса
}
}
Во фрагмент добавьте переменную
Busable mainActivity;
Переопределите метод onAttach(Activity activity)
onAttach(Activity activity){
mainActivity = (Busable) activity;
И получите значение своей переменной
mainActivity.getPosition()
Создайте интерфейс ICallbacks
public interface ICallbacks {
int getPosition();
}
Затем замените код в активности (имплементируйте этот интерфейс, реализуйте метод getPosition(), вынесите переменную position на уровень класса)
public class BusActivity extends AppCompatActivity implements ICallbacks {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private int position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bus);
Intent intent = getIntent();
int DefaultValue = 0;
position = intent.getIntExtra("EXTRA_POS", DefaultValue);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
if(id == android.R.id.home){
finish();
}
return super.onOptionsItemSelected(item);
}
private void setupViewPager(ViewPager viewPager){
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new BusStopFragment(), "BusStop");
adapter.addFragment(new TableFragment(), "Table");
adapter.addFragment(new MapFragment(), "Map");
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount());
}
@Override
public int getPosition() {
return position;
}
}
Затем измените код во фрагменте (создайте переменные ICallbacks ICallbacks, int position и переопределите метод onAttach)
public class BusStopFragment extends Fragment {
private List<Station> stations = new ArrayList();
ListView stationsList;
private ICallbacks ICallbacks;
private int position;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setInitialData();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.busstopfragment, container, false);
stationsList = (ListView) view.findViewById(R.id.stationsList);
Activity activity = new Activity();
StationAdapter stationAdapter = new StationAdapter(getActivity().getApplicationContext(), R.layout.list_item, stations);
stationsList.setAdapter(stationAdapter);
return view;
}
private void setInitialData(){
stations.add(new Station("01", "10 grn", R.drawable.ic_launcher_background));
stations.add(new Station("02", "15 grn", R.drawable.ic_launcher_background));
stations.add(new Station("03", "20 grn", R.drawable.ic_launcher_background));
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (!(context instanceof ICallbacks)) {
throw new ClassCastException("Activity must implement fragment's ICallbacks.");
}
ICallbacks = (ICallbacks) context;
position = ICallbacks.getPosition();
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Делаю регистрацию юзераДлина пароля должна быть от 6 до 16 символов
У меня есть Floating Action Button с Vector Drawable внутриМожно ли под него вставить текст? (не рядом с кнопкой, а внутри нее, как на картинке)
Помогите, пожалуйста, определить причину исключенияУстанавливаю приложение на Centos7, которое работает с MySql
Подскажите пожалуйста как сделать такое: Открываешь Placemark в нем кнопка выбрать, после ее нажатия на странице нужно перезаписать значение...