Positionnement de ViewPager en tant que ligne dans ListView
J'essaie d'utiliser ViewPager comme une ligne ins ListView mais une obtenir une bizarre behaviuor Seule la première ligne fonctionne, mais quand j'ai faites défiler la liste, il disparaît. Quand je défiler une ligne vide, soudain, la ligne ci-dessus est affiché.
Il semble que Android crée un seul pager et de l'utiliser pour toutes les lignes.
C'est ce que je vois lorsque je lance l'application:
C'est ma ligne de mise en page:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:orientation="vertical"
android:paddingBottom="2dp" >
<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" />
</LinearLayout>
C'est ma Liste d'adaptateur:
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;
}
}
C'est mon téléavertisseur adaptateur:
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();
}
}
source d'informationauteur Asaf Pinhassi
Vous devez vous connecter pour publier un commentaire.
Chaque fois que vous avez besoin d'ajouter dynamiquement des téléavertisseurs, vous devez définir un ID pour chaque pager à l'aide de
ViewPager.setId()
.J'ai créé exemple d'application
Exemple ViewPager avec fragment: https://dl.dropboxusercontent.com/u/20178650/builds/listviewwithviewpager.zip
MAIS il y a un gros inconvénient. Toutes les cellules sont stockées dans la mémoire, l'application peut se bloquer par une faible mémoire, si vous avez beaucoup de cellules
EDIT:
Empiriquement, il a été trouvé. Si l'utilisation afficher simplement à la place du fragment dans ViewPager. Je peux écrire une carte correctement et de ne pas être frappé par la mémoire
Exemple ViewPager avec vue: https://dl.dropboxusercontent.com/u/20178650/builds/listviewwithviewpager_v2.zip
J'espère que quelqu'un peut aider
Je me suis confronté exactement le même problème.
Solutions:
J'ai résolu le problème.
Si quelqu'un à besoin de code Merci de me ping.