Android ViewPager 和 ListViews [英] Android ViewPager and ListViews

查看:14
本文介绍了Android ViewPager 和 ListViews的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 Android 开发和整体开发比较陌生.我无法掌握 ViewPager 的语法/过程.

I'm relatively new to Android development and development overall. I'm having trouble grasping the syntax/process for ViewPager.

我有几个 ListView 想要实现到 ViewPager 中.我已经加载了兼容包和所有东西.但是我还没有看到任何有关如何执行此操作的完整示例.

I have several ListViews that I want to implement into a ViewPager. I've got the compatibility pack loaded and everything. But I haven't seen any complete examples of how to do this.

我通过查看示例学习得最好.如果有人可以发布您在其中实施此类事情的任何项目的示例,请告诉我.

I learn best by looking at examples. If someone can post an examples of any projects you've implemented this sort of thing in, please let me know.

问题是当我尝试启动我的活动时,我在这条线上得到一个空指针异常:

The issue is that I get a Null Pointer Exception on this line when trying to launch my activity:

listView1.setAdapter(new ArrayAdapter<Object>(this, R.layout.rowlayout, list1));

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

I suspect that I'm just doing this all wrong. If I don't use the ViewPager, I can get both lists to display their content. So I know the lists aren't null...

感谢 VenomM 下面的回答!这是我最终使用的代码,对 VenomM 的示例稍作修改.

Thanks to VenomM for the answer below! Here's the code I ended up using, slightly modified from VenomM's examples.

ViewPagerAdapter:

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 ) {}
}

阵列适配器:

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;
    }

}

推荐答案

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

I still can't understand why you change your Arrayadapter with object argument, if you want it to hold string items. Try changing

new ArrayAdapter<Object>(this, R.layout.rowlayout, list1)

new ArrayAdapter<String>(this, R.layout.rowlayout, list1)

我使用了自定义 ArrayAdapter,一切正常.如果你成功了,请告诉我.

I used a custom ArrayAdapter, everything worked fine for me. Please let me know if you succeed.

这篇关于Android ViewPager 和 ListViews的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆