代码之家  ›  专栏  ›  技术社区  ›  Sudarshan

尝试访问新片段数据时调用旧片段

  •  0
  • Sudarshan  · 技术社区  · 6 年前

    FragmentZero , FragmentOne , FragmentTwo FragmentThree . 除了数据之外,所有的片段都有相同的代码。当我试图调用当前片段位置时,它正在调用上一个片段以及上一个数据。但风景还不错。

    例如:

    • 从零号碎片开始,一切正常
    • 从片段1开始,它调用片段0,它是数据。

    直到我找到最后的碎片。但在到达最后一个片段后,一切都正常执行。

    这是我的Java代码:

    public class FragmentZero extends Fragment {
    
        private int position = 0;
        private ImageView art;
    
        private static final String TAG = FragmentZero.class.getSimpleName();
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
    
            View root = inflater.inflate(R.layout.fragment_drawing, container, false);
    
            art = root.findViewById(R.id.alphabet_image);
            art.setTag(position);
            art.setImageResource(DrawingActivity.imageList.get(position));
    
            final TextView textView = root.findViewById(R.id.section_label);
            textView.setText(getString(R.string.section_title, position + 1));
    
            ImageView draw_icon0 = root.findViewById(R.id.draw_icon);
            draw_icon0.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(getContext(), ActivityDraw.class).putExtra("image_res", DrawingActivity.imageList.get((Integer) art.getTag())));
                    Log.d(TAG, (Integer) art.getTag()+" from TAG");
                }
            });
            return root;
        }
    
    }
    

    以及onCreate代码:

    SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    ViewPager viewPager = findViewById(R.id.view_pager);
    viewPager.setAdapter(sectionsPagerAdapter);
    

    适配器代码:

    public class SectionsPagerAdapter extends FragmentPagerAdapter {
            public SectionsPagerAdapter(FragmentManager fm) {
                super(fm);
            }
    
            @Override
            public Fragment getItem(int position) {
    
                    switch (position) {
                        case 0:
                            return new FragmentZero();
                        case 1:
                            return new FragmentOne();
                        case 2:
                            return new FragmentTwo();
                        case 3:
                            return new FragmentThree();
    
                    }
    
    
                return null;
            }
    
            @Override
            public int getCount() {
                return imageList.size();
            }
        }
    

    我想通过 current fragment value 到下一个活动。

    0 回复  |  直到 6 年前
        1
  •  1
  •   CruxLab    6 年前

    当您试图将当前片段值传递给下一个活动时,可以从活动设置当前位置。

    声明变量,例如

    public static int currentPos = 0;
    

    然后通过设置当前值

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                    currentPos = position;
                }
    
                @Override
                public void onPageSelected(int position) {
    
                }
    
                @Override
                public void onPageScrollStateChanged(int state) {
    
                }
            });
    

    现在从 Fragment currentPos .

    希望你能得到正确的价值

    startActivity(new Intent(getContext(), ActivityDraw.class).putExtra("image_res", DrawingActivity.imageList.get(currentPos)));