【问题标题】:Creating ListView of ViewPager创建 ViewPager 的 ListView
【发布时间】:2016-04-18 09:14:14
【问题描述】:

我正在尝试创建ViewPager 的列表。我为ListView 写了2 个Adapter-,为ViewPager 写了另一个。但是我只看到一个空列表enter image description here。我尝试以与此处相同的方式实现: Placing ViewPager as a row in ListView, View Pager in listview? 这是我的布局:

列表视图布局

   <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="team14.cs442.com.dummytest.MainActivity">
        <ListView
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:id="@+id/ListView"
           android:background="#e88585">    
       </ListView>   
    </RelativeLayout>

PagerView:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/pager"
    android:longClickable="true"
    xmlns:android="http://schemas.android.com/apk/res/android">
</android.support.v4.view.ViewPager>

View-1:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/image01"
    android:src="@android:drawable/divider_horizontal_dark"
    android:text="Hello"
    xmlns:android="http://schemas.android.com/apk/res/android" />

View-2:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/image02"
    android:src="@android:drawable/divider_horizontal_dark"
    android:text="Goodbye"
    xmlns:android="http://schemas.android.com/apk/res/android" />

代码列表适配器:

class ListViewAdapter extends ArrayAdapter {

Context context;
int layoutId;

public ListViewAdapter(Context context, int resource) {
    super(context,R.layout.pagerview, list);
    this.context = context;
    this.layoutId = resource;

}

@Override
public long getItemId(int position) {
    return position;
}

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

@Override
public Object getItem(int position) {
    return list.get(position);
}

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

    if(convertView==null)
    {LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.pagerview, null);}

    ViewPager viewPager = (ViewPager) convertView;
    viewPager.setAdapter(new CustomAdapter(MainActivity.this));
    return convertView;
}

}

ViewPager adapter:

public class MainActivity extends AppCompatActivity implements
        ItemFragment.OnListFragmentInteractionListener

{
    int[] layouts = {R.layout.image01, R.layout.image02};
    ArrayList<String> list = new ArrayList<String>();
    ListViewAdapter adapter;

    public class CustomAdapter extends PagerAdapter{

        Context mContext;

        public CustomAdapter(Context context){
            mContext = context;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            LayoutInflater inflater = (LayoutInflater) container.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = inflater.inflate(layouts[position],null);
            container.addView(view, 0);
            return view;
        }


        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);
        }

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

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
        }

        @Override
        public void finishUpdate(ViewGroup container) {
            super.finishUpdate(container);
            adapter.notifyDataSetChanged();

        }
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");

        ListView listView = (ListView) findViewById(R.id.ListView);
        adapter = new ListViewAdapter(this, R.layout.pagerview);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
}

我在这里错过了什么?

【问题讨论】:

  • 您似乎没有填充您的 ListView。尝试在您的ListViewAdapter.getCount()中返回 (3)

标签: android listview android-studio


【解决方案1】:

我检查了你的代码,不得不稍作修改。

首先如下更改您的 pagerview.xml。 在这里,您必须指定分页器视图的高度。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#ff3322"
        android:longClickable="true"/>
</LinearLayout>

然后改变PagerAdapter如下:

public class CustomAdapter extends PagerAdapter {

        Context mContext;

        public CustomAdapter(Context context) {
            mContext = context;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            LayoutInflater inflater = (LayoutInflater) container.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = inflater.inflate(layouts[position], null, false);
            container.addView(view);
            return view;
        }


        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }

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

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
        }

        @Override
        public void finishUpdate(ViewGroup container) {
            super.finishUpdate(container);
        }
    }

ListViewAdapter 如下:

public class ListViewAdapter extends BaseAdapter {
        Context context;
        private ArrayList list;

        public ListViewAdapter(Context context, ArrayList list) {
            this.context = context;
            this.list = list;

        }

        @Override
        public long getItemId(int position) {
            return position;
        }

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

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

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

            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.pagerview, null, false);
            }

            ViewPager viewPager = (ViewPager) convertView.findViewById(R.id.pager);
            viewPager.setAdapter(new MainActivity.CustomAdapter(context));
            return convertView;
        }
    }

最后在你的 onCreate 中设置适配器如下

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");

        ListView listView = (ListView) findViewById(R.id.ListView);
        ListViewAdapter adapter = new ListViewAdapter(this, list);
        listView.setAdapter(adapter);
    }

【讨论】:

  • 我在上述解决方案中做了一个小改动(在 ListViewAdapter 的 getView() 中:将 convertView = inflater.inflate(R.layout.list_items, null, false); 更改为 convertView = inflater.inflate( R.layout.pagerview, null, false);) 和宾果游戏!万分感谢! (不幸的是我还不能投票)
  • @hrushi 很高兴听到它对你有用,我更新了我的代码。
猜你喜欢
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多