Java 根据int值更改片段
大家好,我的代码有问题,我想做的是,当你改变微调器的位置,改变要显示的片段,这是我写的,但它不起作用,如果有人能给我一个更好的方法来做它或解决方案,这将是伟大的 这是我的班级:Java 根据int值更改片段,java,android,android-fragments,Java,Android,Android Fragments,大家好,我的代码有问题,我想做的是,当你改变微调器的位置,改变要显示的片段,这是我写的,但它不起作用,如果有人能给我一个更好的方法来做它或解决方案,这将是伟大的 这是我的班级: public class MainActivity extends ActionBarActivity { private static final int NUM_PAGES = 2; private ViewPager mPager; private PagerAdapter mPagerAdapter; Str
public class MainActivity extends ActionBarActivity {
private static final int NUM_PAGES = 2;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
String[] ciudades = { "Desde Paraná", "Desde Santa Fe", "Desde el pozo", "Desde abogacia"};
public int ciudad = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPager = (ViewPager) findViewById(R.id.pager);
Spinner sp = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.opciones, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(adapter);
sp.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
ciudad = position;
Toast.makeText(parentView.getContext(), ciudades[position], Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parentView) {
}
});
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
super.onBackPressed();
} else {
// Otherwise, select the previous step.
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
/* Here is what I do, I took the value of ciudad and use it to display different group of fragment */
if(ciudad == 0){
switch(position){
case 0:
return new Home_fragment();
case 1:
return new Next_fragment();
}
}else if(ciudad == 1){
switch(position){
case 0:
return new Home_fragment_staFe();
case 1:
return new Next_fragment_staFe();
}
}
return null;
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
提前谢谢
编辑
我试过KCopock告诉我的方法
notifyDataSetChanged
我以前也是这样,但还是不起作用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
Spinner sp = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource( this, R.array.opciones, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(adapter);
sp.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
ciudad = position;
Toast.makeText(parentView.getContext(), ciudades[position], Toast.LENGTH_SHORT).show();
mPagerAdapter.notifyDataSetChanged();
}
public void onNothingSelected(AdapterView<?> parentView) {
}
});
// Instantiate a ViewPager and a PagerAdapter.
mPager.setAdapter(mPagerAdapter);
}
它永远不会再调用getItem,因为它不知道ciudad的值已更改。在spinner value changed方法中,当您更改ciudad的值时,调用mPagerAdapter.notifyDataSetChanged以通知适配器它应该重新创建片段
此外,Home_片段是Java非常非传统的命名模式。它应该是HomeFragment。但它不起作用,请不要用它来描述问题。什么不起作用?当我更改ciudad值时,不会从Home\u fragment更改为Home\u fragment\u staFe