java - 如何使用 viewPager 和 Fragments 传递多个数据

标签 java android android-fragments

我正在尝试将 string 数据与 images 一起传递。 为什么在运行此代码时我只显示了 image 'nature4' 而没有显示 'nature2' imagestrings 'Fragment1' 等。

 public class MainActivity extends AppCompatActivity {

    private ViewPager viewPager;

    private ArrayList<String> strs;

    private FragmentPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("x","onCreateActivity");

        strs = new ArrayList<String>();
        strs.add("Fragment 1");
        strs.add("Fragment 2");
        strs.add("Fragment 3");
        strs.add("Fragment 4");
        strs.add("Fragment 5");

        viewPager = (ViewPager) findViewById(R.id.pager);

        adapter = new FragmentPagerAdapter(getSupportFragmentManager(), strs);
        viewPager.setAdapter(adapter);
    }

    public class FragmentPagerAdapter extends FragmentStatePagerAdapter {

        private ArrayList<String> itemData;

        public FragmentPagerAdapter(FragmentManager fm, ArrayList<String> itemData) {
            super(fm);
            this.itemData = itemData;
        }

        @Override
        public int getCount()
        {
            return itemData.size();
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            super.destroyItem(container, position, object);
            Log.i("x","destroyItem");
        }
        @Override
        public Fragment getItem(int position){
        Log.i("x","getItem");
            // pass data to fragment
            Fragment1 f = Fragment1.newInstance(itemData.get(position));
            return f;

        }
    }
}

和Fragment.class

 public class Fragment1 extends Fragment {

    public  Fragment1(){}

    String stringValue;

    private int [] images = {R.drawable.nature2,R.drawable.nature4};

    public  static Fragment1 newInstance(String str)
    {
        Fragment1 slider=new Fragment1();
        Bundle b=new Bundle();
        b.putString("stringValue", str);
        slider.setArguments(b);
        return slider;
    }

    TextView textView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.i("x","onCreateViewFragment");

        View view = inflater.inflate(R.layout.fragment1, container, false);
        textView = (TextView) view.findViewById(R.id.textView);
        ImageView photo = (ImageView) view.findViewById(image);
        photo.setImageResource(images[1]);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        Log.i("x","onActivityCreatedFragment");
        super.onActivityCreated(savedInstanceState);
        stringValue = getArguments().getString("stringValue");
        textView.setText(stringValue);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i("x","onCreateFragment");
        super.onCreate(savedInstanceState);

    }
}

最佳答案

我认为你需要把你的问题说清楚。如果您想将 String stringValuein imageResIdActivity 传递到 Fragment,请尝试以下代码。

public static Fragment1 newInstance(String str, int imageResId) {
    Fragment1 slider = new Fragment1();
    Bundle b=new Bundle();
    b.putString("stringValue", str);
    b.putInt("image_resid", imageResId);
    slider.setArguments(b);
    return slider;
  }

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    stringValue = getArguments().getString("stringValue");
    imageResId = getArguments().getIn("image_resid");
  }

FragmentPagerAdapter:

 public class FragmentPagerAdapter extends FragmentStatePagerAdapter {
        ...
    @Override
    public Fragment getItem(int position){
      Fragment fragment;
      String str = itemData.get(position);
      int resId;
      if (position == 0) {
        resId = R.drawable.nature2;
      } else if (position == 1) {
        resId = R.drawable.nature4;
      }
      fragment = Fragment1.newInstance(str, resId);
      ...

      return fragment;
    }
  }

关于java - 如何使用 viewPager 和 Fragments 传递多个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46814830/

相关文章:

java - 如何在数组中仅保留唯一值?

android - 如何将进度对话框放在单独的类中并调用 android 中的每个 Activity ?

javascript - 使用纬度和经度从链接启动谷歌地图方向的网络应用程序

android - 从另一个 fragment :IllegalStateException: Can not perform this action after onSaveInstanceState 启动 dialogfragments

android - 在传递给 FragmentPagerAdapter.setPrimaryItem() 之前未创建 fragment

java - 打印出 arraylist 元素时出错

java - 结果集.getObject(1); Actor 阵容发生在哪里?

java - eclipse - 包 org.testng 不存在

android - 已发布的 Android 应用程序在 Google Play 上不可见

android从 Activity 2中的点击事件打开特定的选项卡 fragment