在viewpager中使用自定义适配器的动态列表视图

时间:2013-06-26 15:12:17

标签: android listview android-viewpager fragment swipe

我尝试用两个片段创建viewpager。在一个片段中,我尝试使用动态内容创建listview。

main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <com.example.pkg.views.CustomViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v4.view.PagerTabStrip
                android:id="@+id/pager_title"
                android:paddingBottom="10dp"
                android:paddingTop="10dp"
                android:textAppearance="@style/PagerTabStripText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="top" />
    </com.example.pkg.views.CustomViewPager>
</RelativeLayout>

在主要活动类中,我使用自己的CustomFragmentAdapter和覆盖的getItem(int index)方法。

@Override
public Fragment getItem(int i) {
switch (i) {
    case 0:
        return new List();

班级列表扩展片段:

public class List extends Fragment {
    private PointManager pointManager;
    private ListView list ;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.list, container, false);
        list = (ListView) rootView.findViewById(R.id.point_list);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        pointManager = PointManager.getInstance(getActivity());

        ListViewAdapter adapter = new ListViewAdapter(getActivity(), R.id.point_list, pointManager.getPoints());
        list.setAdapter(adapter);
        list.invalidate();
    }

    @Override
    public void onResume() {
        super.onResume();
        ListViewAdapter adapter = new ListViewAdapter(getActivity(), R.id.point_list, pointManager.getPoints());
        list.setAdapter(adapter);
        list.invalidate();
    }
}

list.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <ListView
            android:id="@+id/point_list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@android:color/white"
            android:divider="#ffdead"
            android:dividerHeight="1dp"
            android:listSelector="@drawable/list_selector" />
</RelativeLayout>

ListViewAdapter:

public class ListViewAdapter extends ArrayAdapter<Point> {
    private final Activity activity;
    private List<Point> points;

    public ListViewAdapter(Activity context, int textViewResourceId, List<Point> objects) {
        super(context, textViewResourceId, objects);
        this.activity = context;
        this.points = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parentView) {
        ViewHolder viewHolder;

        View rowView = convertView;

        if(rowView == null) {
            LayoutInflater inflater = activity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.custom_list, parentView, false);

            viewHolder = new ViewHolder();
            viewHolder.title = (TextView) rowView.findViewById(R.id.notification_title);
            viewHolder.description = (TextView) rowView.findViewById(R.id.notification_desc);
            viewHolder.icon = (ImageView) rowView.findViewById(R.id.notification_icon);
            rowView.setTag(viewHolder);
        }
        else
            viewHolder = (ViewHolder) rowView.getTag();

        viewHolder.title.setText(points.get(position).getTitle());
        viewHolder.description.setText(points.get(position).getDescription());

        return rowView;
    }

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

    private class ViewHolder {
        TextView title;
        TextView description;
        ImageView icon;
    }
}

一切都好。但!滑动在ViewPager中不起作用。我认为这是因为我在onCreateView中返回rootView。如果我返回super.onCreateView(...),滑动工作!但是列表没有显示。

怎么了?

感谢。

1 个答案:

答案 0 :(得分:0)

这是因为我在CustomViewPager中处理onInterceptTouchEvent中第二个片段的操作。

if(getCurrentItem() == CURRENT_SECOND) {} 

我添加了

if(getCurrentItem() == CURRENT_FIRST) {}

所有的作品。感谢@Luksprog。