片段未在ViewPager中更新 [英] Fragments not updating in viewpager

查看:74
本文介绍了片段未在ViewPager中更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对android中的ViewPager和适配器世界很陌生.我已经看到这个问题很多次了,但并不太明白,因此希望得到一个简化的答案:).

I am pretty new to ViewPager and adapter world in android. I have seen this issue asked many times but did not quite understand so hoping for a simplified answer :).

我有一个带有3个选项卡的ViewPager,每个选项卡都有一个片段.默认情况下,用户首先看到tab2,他在其中输入了一些输入以生成字符串.然后需要在tab3中使用此字符串,然后从中生成一个qr代码.

I have a ViewPager with 3 tabs and each tab has a fragment. By default the user first sees tab2 where he gives some imput to generate a string. this string then needs to be taken in tab3 which generates a qr code from it.

选项卡2中的字符串更新为一个类,选项卡3从那里获取字符串.

the string from tab 2 is updated to a class and tab3 takes the string from there.

我的问题是,当我从tab2-> tab3移走时,不会生成二维码.但是当我进入tab2-> tab1-> tab3时,它会生成.我猜它保留了我的旧片段.

My Problem is that when i move from tab2->tab3 the qr code is not generated. But when i go tab2->tab1->tab3 it is generated. I am guessing it retains my old fragment .

下面是我的班级代码.您能否让我知道为什么viewpager的行为如此.

Below are my class codes. Could you please let me know why is this viewpager behaviour so.

我的FragementActivity类:

my FragementActivity class:

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);

   }
}

我的寻呼机适配器看起来像

My Pager Adapter looks like

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中未更新的片段:

and my fragment in tab3 that is not updating:

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;


}
}

推荐答案

ConfigExchangeMain 类中:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {           
        }

        @Override
        public void onPageSelected(int position) {

         Fragment fragment= adapter.getItem(position);

           if(fragment instanceof ConfigExchangeQR ){
            ((ConfigExchangeQR)fragment).update();
           }

        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });


     @Override
public void onDestroy() {
    super.onDestroy();
    viewPager.clearOnPageChangeListeners();
}

将此方法添加到您的 ConfigExchangeQR 片段

Add this method to your ConfigExchangeQR fragment

 public class ConfigExchangeQR extends Fragment {
      ...
   public void update(){

        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) {

       }



    }
 }

这篇关于片段未在ViewPager中更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆