【问题标题】:How to implement List View and other fragments with View Pager?如何使用 View Pager 实现 List View 和其他 Fragment?
【发布时间】:2014-02-11 16:42:10
【问题描述】:

我正在尝试将 View 寻呼机与 ListView 和其他片段一起使用。列表视图将用作菜单,而其他片段将仅显示文本。

我已经设法用 TextView 制作了 ViewPager,但我只是不知道如何实现 List 视图片段。我试图在网上查找示例,但找不到我需要的。

这就是我现在拥有的 https://gist.github.com/anonymous/8646895

这里只是主类

  public class MainActivity extends FragmentActivity {

MyPageAdapter pageAdapter;
List<Fragment>fragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, MyFragment.class.getName()));
    fragments.add(Fragment.instantiate(this, FragmentB.class.getName()));

    pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);

    ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
    pager.setAdapter(pageAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}



 private class MyPageAdapter extends FragmentPagerAdapter {

     private List<Fragment> fragments;

     public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
         super(fm);
         this.fragments = fragments;

     }
     @Override
     public Fragment getItem(int position) {

         return this.fragments.get(position);
     }

     @Override
     public int getCount() {
         return this.fragments.size();
     }
 }

}

【问题讨论】:

  • 在布局中有一个带有列表视图的片段,您可以膨胀并填充列表视图。
  • 或者可以在每个项目上使用导航抽屉点击在容器中有一个新片段

标签: android listview android-fragments android-viewpager


【解决方案1】:

您必须使用 ListFragment 。创建一个ListFragment 并将其显示在ViewPager 中。下面给出了一个简单的ListFragment 代码

SimpleListFragment.java

public class SimpleListFragment extends ListFragment  {  

String[] numbers_text = new String[] { "one", "two", "three", "four",  
     "five", "six", "seven", "eight", "nine", "ten", "eleven",  
     "twelve", "thirteen", "fourteen", "fifteen" };  

 String[] numbers_digits = new String[] { "1", "2", "3", "4", "5", "6", "7",  
        "8", "9", "10", "11", "12", "13", "14", "15" };  

  @Override  
  public void onListItemClick(ListView l, View v, int position, long id) {  
  new CustomToast(getActivity(), numbers_digits[(int) id]);     
  }  

  @Override  
  public View onCreateView(LayoutInflater inflater, ViewGroup container,  
    Bundle savedInstanceState) {  
   ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
     inflater.getContext(), android.R.layout.simple_list_item_1,  
     numbers_text);  
   setListAdapter(adapter);  
   return super.onCreateView(inflater, container, savedInstanceState);  
  }  
 } 

在主Activity的ViewPager的getItem()中

if (index == 0) {
            SimpleListFragment list = new SimpleListFragment ();
            return list;
        }

更多详情click here

【讨论】:

    【解决方案2】:

    如下创建一个新的fragment

    public class SuperAwesomeCardFragment extends Fragment {
        CustomAdapter customAdapter;
        ArrayList<String> values;
        public static SuperAwesomeCardFragment superAwesomeFragment;
        /**
         * Creating new instance of the fragment
         * 
         * @param position
         * @return fragment
         */
        public static SuperAwesomeCardFragment newInstance(int position) {
            superAwesomeFragment = new SuperAwesomeCardFragment();
    
            Bundle b = new Bundle();
            b.putInt(ARG_POSITION, position);
            superAwesomeFragment.setArguments(b);
            return superAwesomeFragment;
        }
    
    
    
    @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                position = getArguments().getInt(ARG_POSITION);
                    values.add("First");
                   values.add("second");        
            }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            mContainer = container;
            LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT);
            FrameLayout fl = new FrameLayout(getActivity());
            fl.setLayoutParams(params);
    
            final int margin = (int) TypedValue.applyDimension(
                    TypedValue.COMPLEX_UNIT_DIP, 8, getResources()
                            .getDisplayMetrics());
            ListView mListView = null;
            mList = commomList(mListView, params, margin);
            fl.addView(mList);
            return fl;
        }
    /**
         * Common list for all views *
         * 
         * @param mList
         * @param params
         * @param margin
         * @return
         */   
        private ListView commomList(ListView mList, LayoutParams params, int margin) {
            mList = new ListView(getActivity());
            params.setMargins(margin, margin, margin, margin);
            mList.setLayoutParams(params);
            mList.setLayoutParams(params);
            customAdapter = new CustomAdapter(getActivity(), values);
            mList.setAdapter(customAdapter);
            return mList;
        }
    }
    

    CustomAdapter 是你的班级,extends base adapter

    public class CustomAdapter extends BaseAdapter {
        ArrayList<String> mlistName;
        private LayoutInflater layoutinflater;
        private Context mContext;
    
        public CustomAdapter(Context context, ArrayList<String> elements) {
            mlistdata = elements;
            layoutinflater = LayoutInflater.from(context);
            mContext = context;
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mlistdata.size();
        }
    
        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public View getView(final int arg0, View convertview, ViewGroup arg2) {
            // TODO Auto-generated method stub
            final ViewHolder holder;
            if (convertview == null) {
                holder = new ViewHolder();
                convertview = layoutinflater.inflate(R.layout.list_items, null);
    
                holder.name = (TextView) convertview
                        .findViewById(R.id.list_item_name);
    
                convertview.setTag(holder);
            } else {
                holder = (ViewHolder) convertview.getTag();
            }
    
            holder.name.setText((mlistdata.get(arg0));
            return convertview;
        }
    
        static class ViewHolder {
            TextView  name;
        }
    
    }
    

    并在您的 MyPageAdapter 类中更改您的 getItem 代码

    @Override
            public Fragment getItem(int position) {
    
                return SuperAwesomeCardFragment.newInstance(position);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多