簡體   English   中英

ListView中的ViewPager [FragmentPagerAdapter]

[英]ViewPager [FragmentPagerAdapter] inside ListView

我正在嘗試將ViewPager放入ListView

這里是ListView AdapterClass的代碼:

public class AdapterPager extends BaseAdapter {

.....

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view = convertView;

    if (view == null) {
        view = lInflater.inflate(R.layout.component_pager, parent, false);
        new ViewHolder(view, itemData.get(position));
    }

 return view;
}

視圖持有人:

private class ViewHolder {
  ViewPager pager;
  PagerAdapter pagerAdapter;

 public ViewHolder(View view, ModelItem  model){
        pager = (ViewPager) view.findViewById(R.id.pager);
        pager.setId(model.getId());  /// uniq ID
        pagerAdapter = new MyFragmentPagerAdapter(((FragmentActivity)view.getContext()).getSupportFragmentManager());
        pager.setAdapter(pagerAdapter);
    }

然后,尋呼機適配器:

    static final int PAGE_COUNT = 2;

    private class MyFragmentPagerAdapter extends FragmentPagerAdapter {

        public MyFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return FragmentComponentPager.newInstance(position, mModel);
        }

        @Override
        public float getPageWidth(int position) {
            float f_width = 1f;
            return f_width;
        }

        @Override
        public int getCount() {
            return PAGE_COUNT;
        }

    }

最后是Pager Fragment

  public class FragmentComponentPager extends Fragment {
    static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
    static final String ARGUMENT_NAME        = "arg_name";
    int pageNumber;

    public static FragmentComponentPager newInstance(int page, ModelItem data) {
        FragmentComponentPager pageFragment = new FragmentComponentPager();
        Bundle arguments = new Bundle();
        arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
        if (data != null){
           arguments.putString(ARGUMENT_NAME, data.getName());
        }
        pageFragment.setArguments(arguments);
        return pageFragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.component_list, null);          
        TextView tvTitle          = (TextView)     view.findViewById(R.id.tvTitle);
        tvTitle.setText(getArguments().getString(ARGUMENT_NAME));
       return view;
    }
  }

當我運行它時, ListView顯示我添加的所有項目,但所有項目( 最后一個項目除外)都帶有空ViewPager

並且,如果我刪除了pager.setId(model.getId()); 第一項顯示視圖尋呼機,其他項為空。

猜測FragmentManager的錯誤之處,但不知道如何處理:(

在ViewHolder中,您需要調用getChildFragmentManager而不是getSupportFragmentManager。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM