Android ViewPager和ListViews

exp*_*ivo 12 android android-listview android-viewpager

我对整个Android开发和开发都比较陌生.我在掌握ViewPager的语法/过程时遇到了麻烦.

我有几个ListViews要实现到ViewPager中.我已经加载了兼容包和一切.但我还没有看到任何完整的例子来说明如何做到这一点.

通过查看示例,我学得最好.如果有人可以发布你已实现此类事情的任何项目的示例,请告诉我.

问题是,在尝试启动我的活动时,我在此行上遇到Null Pointer Exception:

listView1.setAdapter(new ArrayAdapter<Object>(this, R.layout.rowlayout, list1));
Run Code Online (Sandbox Code Playgroud)

我怀疑我只是做错了.如果我不使用ViewPager,我可以获得两个列表来显示其内容.所以我知道列表不是空的...

编辑:

感谢VenomM的答案如下!这是我最终使用的代码,稍微修改了VenomM的示例.

ViewPagerAdapter:

public class ViewPagerAdapter extends PagerAdapter implements TitleProvider
{
    private ListView listView1;
    private static String[] titles = new String[]
    {
       "Page 1",
       "Page 2",
       "Page 3",
    };
    private final Context context;

    public ViewPagerAdapter( Context context )
    {
        this.context = context;
    }

    @Override
    public String getTitle( int position )
    {
        return titles[ position ];
    }

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

    @Override
    public Object instantiateItem(View collection, int position) {

        LayoutInflater layoutInflater = ((Activity) context).getLayoutInflater();

        listView1 = (ListView) layoutInflater.inflate(R.layout.listview1, null);

        String[] listData = null;
        MyArrayAdapter dataAdapter;

        if (position == 0) {
          listData = context.getResources().getStringArray(R.array.list1);
          dataAdapter = new MyArrayAdapter((Activity) context,
              R.layout.rowlayout, listData);
        } else if (position == 1) {
          listData = context.getResources().getStringArray(R.array.list2);
          dataAdapter = new MyArrayAdapter((Activity) context,
              R.layout.rowlayout, listData);
        } else {
          listData = context.getResources().getStringArray(R.array.list3);
          dataAdapter = new MyArrayAdapter((Activity) context,
              R.layout.rowlayout, listData);
        }

        listView1.setAdapter(dataAdapter);
        listView1.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view,
                int position, long arg3) {
              Toast.makeText(context,
                  adapter.getAdapter().getItem(position).toString(),
                  Toast.LENGTH_LONG).show();
            }
        });

        ((ViewPager) collection).addView(listView1, 0);

        return listView1;
    }


    @Override
    public void destroyItem(View collection, int position, Object view) {
        System.out.println("on destroyItem()");
        ((ViewPager) collection).removeView((ListView) view);
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        System.out.println("on isViewFromObject()");
        return view == ((ListView) object);
    }

    @Override
    public void finishUpdate( View view ) {}

    @Override
    public void restoreState( Parcelable p, ClassLoader c ) {}

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void startUpdate( View view ) {}
}
Run Code Online (Sandbox Code Playgroud)

ArrayAdapter:

public class MyArrayAdapter extends ArrayAdapter<String>{

    private Activity context = null;
    private String[] names = null;
    private int rowLayoutId;
    public MyArrayAdapter(Activity context, int textViewResourceId, String[] names) {
        super(context, textViewResourceId, names);
        this.context = context;
        this.names = names;
        this.rowLayoutId =textViewResourceId;
    }

    // static to save the reference to the outer class and to avoid access to
    // any members of the containing class
    static class ViewHolder {
        protected ImageView imageView;
        protected TextView textView;
    }

}
Run Code Online (Sandbox Code Playgroud)

Ven*_*noM 5

我仍然无法理解为什么要使用object参数更改Arrayadapter,如果您希望它保存字符串项.尝试改变

new ArrayAdapter<Object>(this, R.layout.rowlayout, list1)
Run Code Online (Sandbox Code Playgroud)

new ArrayAdapter<String>(this, R.layout.rowlayout, list1)
Run Code Online (Sandbox Code Playgroud)

我使用了一个自定义的ArrayAdapter,一切都很适合我.如果你成功,请告诉我.

  • 谢谢,我稍后再试.但我仍然认为我的问题是ViewPagerAdapter.我找到了这个例子:http://blog.stylingandroid.com/archives/542; 但他只是在同一数据的代码中显示创建ListViews.我希望能够从不同的数组创建不同的页面. (2认同)