1. 程式人生 > >ViewPager中Fragment和Activity直間的傳值

ViewPager中Fragment和Activity直間的傳值

程式碼拿走,程式碼拿走,首先因為我的需求頁面都差不多,類似於頭條的那種,所以直接公用了一個fragment佈局,當然你也可以建立多個,沒有影響,主要實現的就行Fragment和Activity的傳值處理

首先建立一個Fragment,在這裡面我是定義了一個公共的靜態方法,getInstance(),這是一個傳值的方法,要在activity中呼叫,直接複製在你的Fragment中就行,onCreateView()中的第一行就是使用程式碼的形式建立一個Textview控制元件,然後通過

        Bundle arguments = this.getArguments();
        String url = arguments.getString("url");

顯示拿到傳遞的數值,拿到的就是getInstance(),中所返回的引數


public class NewsFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        TextView textView = new TextView(getActivity());
        Bundle arguments = this.getArguments();
        String url = arguments.getString("url");
          textView.setText(url);

        return textView;
    }
    
    public static Fragment getInstance(String url){
        NewsFragment newsFragment = new NewsFragment();

        Bundle budle=new Bundle();
        budle.putString("url",url);
        newsFragment.setArguments(budle);
        return newsFragment;

    }
}

activity中的實現方式,這裡我是直接建立了一個string型別的陣列,裡面兩個資料,傳值的話就直接在ViewPager的介面卡中的gitItem方法處理

  Fragment fragment = NewsFragment.getInstance(urls[position]);

詳細的話看程式碼


public class MainActivity extends FragmentActivity {
 String[] urls=new String[]{"www.baidu.com","www.toutiao.com"};
    private ViewPager vp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = findViewById(R.id.vp);
        vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                Fragment fragment = NewsFragment.getInstance(urls[position]);
                return fragment;
            }

            @Override
            public int getCount() {
                return urls.length;
            }
        });

    }
}