配售ViewPager作为行的ListView [英] Placing ViewPager as a row in ListView

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

问题描述

我尝试使用ViewPager作为行插件的ListView但得到一个匪夷所思的behaviuor - 只有第一排的作品,但是当我滚动列表消失。当我滚动一个空行,突然行上方被查看。 这似乎是安卓创建一个寻呼机,并用它为所有行。

I try to use ViewPager as a row ins ListView but a get a bizarre behaviuor - Only the first row works, but when I scroll the list it disappears. When I scroll an empty row, suddenly the row above is being viewed. It seems like Android creates a single pager and use it for all rows.

这是我所看到的,当我启动应用程序:

This is what I see when I launch the app:

这是我行的布局:

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/textViewFriendName"
    style="@style/TextStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/myFriendsBg"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:text="TextView" />

<View style="@style/DividerHorizontalStyle_gray" />

    <android.support.v4.view.ViewPager
        android:id="@+id/pagerMyFriendHabits"
        android:layout_width="match_parent"
        android:layout_height="@dimen/DefaultImageHeight" />


<View style="@style/DividerHorizontalStyle" />

这是我的名单适配器:

公共类MyFriendsAdapter扩展了BaseAdapter实现OnClickListener {

public class MyFriendsAdapter extends BaseAdapter implements OnClickListener {

private ArrayList<UiD_UserFriend> mItems;
private Context mContext;
private FragmentManager mFragmentManager;

public MyFriendsAdapter(Context context, ArrayList<UiD_UserFriend> items, FragmentManager fragmentManager) {
    mContext = context;
    mItems = items;
    mFragmentManager = fragmentManager;
}

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

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

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

@Override
public View getView(int position, View currentView, ViewGroup viewGroup) {
    Holder holder = null;
    if (currentView == null) {
        currentView = View.inflate(mContext, R.layout.view_list_item_myfriends, null);
        holder = new Holder();
        holder.textViewUserName = (TextView) currentView.findViewById(R.id.textViewFriendName);
        holder.mMyFriendspager = (ViewPager) currentView.findViewById(R.id.pagerMyFriendHabits);
        currentView.setTag(holder);
    } else {
        holder = (Holder) currentView.getTag();
    }

    holder.textViewUserName.setText(mItems.get(position).getmName());
    MyFriendPagerAdapter tempMyFriendPagerAdapter = new MyFriendPagerAdapter(mFragmentManager, mItems.get(position).getFriendHabits());
    holder.mMyFriendspager.setAdapter(tempMyFriendPagerAdapter);

    return currentView;
}

class Holder {
    TextView textViewUserName;
    ViewPager mMyFriendspager;
}

}

这是我的传呼机适配器:

This is my pager adapter:

public class MyFriendPagerAdapter extends FragmentPagerAdapter {

private ArrayList<UiD_Habit> mHabits;

public MyFriendPagerAdapter(FragmentManager fm, ArrayList<UiD_Habit> habits) {
    super(fm);
    mHabits = habits;
}

@Override
public Fragment getItem(int index) {
    return new FragmentMyFriendPage(mHabits.get(index));
}

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

}

推荐答案

当你需要动态地添加寻呼机,您需要设置一个ID,使用 ViewPager.setId()每个寻呼机

Whenever you need to dynamically add pagers, you need to set an ID for each pager using ViewPager.setId().

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

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