Я довольно новичок в ViewPager и мире адаптеров в android. Я видел эту проблему много раз, но не совсем понял, поэтому надеюсь на упрощенный ответ :).Фрагменты, не обновляющиеся в viewpager
У меня есть ViewPager с 3 вкладками, и каждая вкладка имеет фрагмент. По умолчанию пользователь сначала видит tab2, где он дает некоторый imput, чтобы сгенерировать строку. эта строка затем должна быть взята в tab3, которая генерирует из нее код qr.
строка из вкладки 2 обновляется до класса, а tab3 берет строку оттуда.
Моя проблема в том, что когда я перехожу от tab2-> tab3, код qr не генерируется. Но когда я иду tab2-> tab1-> tab3, он генерируется. Я предполагаю, что он сохраняет мой старый фрагмент.
Ниже приведены мои коды классов. Не могли бы вы сообщить мне, почему это поведение в этом представлении.
мой класс FragementActivity:
public class ConfigExchangeMain extends FragmentActivity {
FragmentPagerAdapter adapterViewPager;
SampleFragementPagerAdapterExchange adapter;
String sent;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.config_exchange_main);
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
adapter=new SampleFragementPagerAdapterExchange(getSupportFragmentManager());
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(1);
// Give the TabLayout the ViewPager
TabLayout tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(viewPager);
}
}
Мой Пейджер адаптер выглядит
public class SampleFragementPagerAdapterExchange extends FragmentStatePagerAdapter {
final int PAGE_COUNT = 3;
private String tabTitles[] = new String[]{"CONTACTS", "HOME", "QR+SCAN"};
private ConfigDetail context;
public SampleFragementPagerAdapterExchange(FragmentManager fm) {
super(fm);
//this.context = context;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 1:
return new ConfigExchangeNFR();
case 0:
return new ConfigExchangeHome();
case 2:
return new ConfigExchangeQR();
default:
return new ConfigExchangeQR();
}
}
@Override
public int getCount() {
return PAGE_COUNT;
}
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
и мой фрагмент в TAB3, не обновляя:
public class ConfigExchangeQR extends Fragment {
ImageView iQRCode ;
int iQRDimension;
Button bScan;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
View view1 = inflater.inflate(R.layout.config_exchange_qr, container, false);
iQRCode = (ImageView)view1.findViewById(R.id.qrCode);
iQRDimension = 900;
String FinalQRCode = KeyValueDb.getPrefFinalVCard(getActivity());
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(FinalQRCode, null,
contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), iQRDimension);
try {
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
iQRCode.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
bScan = (Button)view1.findViewById(R.id.scan_qr);
bScan.setOnClickListener(new View.OnClickListener() {
public void onClick(View paramAnonymousView) {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
});
return view1;
}
}
спасибо @Adam, что действительно работало, пришлось немного поиграть с ключом, поскольку это было моим общим предпочтением, но да, ваше решение вызвать обновление при выборе вкладки действительно работал отлично. также приняли ваш ответ, спасибо снова –