显示空白列表项目的ListView中的ViewPagers

[编辑] :谢谢所有有意义的答案,现在问题解决了,谢谢你的帮助。 类似的问题: Android:我无法使用ViewPager WRAP_CONTENT

我试图实现我的应用程序的用户界面:我想在每一行ViewPagerListView

这是我的文件:

MainActivity.java

 package com.condi; import android.app.ListActivity; import android.os.Bundle; import android.view.Menu; public class MainActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setListAdapter(new CardListAdapter(this, getFragmentManager())); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } } 

CardListAdapter.java

 package com.condi; import java.util.List; import android.app.FragmentManager; import android.content.Context; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; public class CardListAdapter extends BaseAdapter { private Context context; private FragmentManager fragmentManager; private List<Profile> profiles; CardListAdapter(Context context, FragmentManager fragmentManager) { this.context = context; this.fragmentManager = fragmentManager; this.profiles = new DatabaseHelper(context).getProfiles(); } @Override public int getCount() { return profiles.size(); } @Override public Profile getItem(int position) { return profiles.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = View.inflate(context, R.layout.profile_card, null); CardPagerAdapter mCardPagerAdapter = new CardPagerAdapter( fragmentManager); ViewPager viewPager = (ViewPager) convertView.findViewById(R.id.pager); viewPager.setAdapter(mCardPagerAdapter); viewPager.setId(R.id.pager); return convertView; } } 

profile_card.xml (问题来自wrap_content )。

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dp" android:layout_marginLeft="6dp" android:layout_marginRight="6dp" android:layout_marginTop="4dp" android:background="@drawable/card_background" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </FrameLayout> 

CardPagerAdapter.java

 package com.condi; import android.app.Fragment; import android.app.FragmentManager; import android.support.v13.app.FragmentPagerAdapter; public class CardPagerAdapter extends FragmentPagerAdapter { public CardPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new Fragment1(); case 1: return new Fragment2(); } return null; } @Override public int getCount() { return 2; } } 

Fragment1.java

 package com.condi; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment1 extends Fragment { public Fragment1() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.preference_category, container, false); } } 

Fragment2.java

 package com.condi; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment2 extends Fragment { public Fragment2() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.preference_category, container, false); } } 

提供configuration文件的数据库运行良好。 问题是,我得到一个空的列表与正确的数量的项目,但没有显示任何ViewPager 。 我的应用程序的截图

我究竟做错了什么 ?

Solutions Collecting From Web of "显示空白列表项目的ListView中的ViewPagers"

尝试在xml中更改ViewPager的高度。 wrap_content不起作用。

为了说明清楚,在本devise中使用ui性能时,在列表视图中使用视图页面是一个不好的做法。 处理这个问题的最好方法是:

  1. 做手工充气的视图和添加到布局。

  2. 为每个viewpager添加一个唯一的id,以便由系统唯一标识。

  3. 扩展自定义viewpager和onmeasure()度量在选定的页面上膨胀的子布局。 您可以通过在自定义viewpager中设置callback并从ViewPage的滚动侦听器中触发callback,通过传递位置来标识子布局来完成此操作。
  4. 在您的onMeaure()方法中,使用super.onMeasure()传递新测量的规格来测量子布局高度并将其设置为视图页高度。

要点要点:

注意为您所填充的viewpager设置一个唯一的ID。

尝试在布局高度这个问题

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="4dp" android:layout_marginLeft="6dp" android:layout_marginRight="6dp" android:layout_marginTop="4dp" android:background="@drawable/card_background" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </FrameLayout> 

对您的viewpager的高度使用wrap_content是一个糟糕的做法。 您可以使用match_parent或静态dp作为viewpager的高度。

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="4dp" android:layout_marginLeft="6dp" android:layout_marginRight="6dp" android:layout_marginTop="4dp" android:background="@drawable/card_background" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </FrameLayout> 

如果必须为viewpager的高度使用wrap_content,则可以覆盖viewpager的onMeasure()并计算高度。 下面是一个关于它的例子。

Android:我无法使用ViewPager WRAP_CONTENT

我希望这会帮助你。

ViewPager现在不支持wrap_content,因为它不会同时加载所有的子项,这意味着它不能得到适当的度量。 你必须修复视图的高度在你的XML或创build一个自定义ViewPager(阅读更多在这里 ),并在你的XML中使用它

尝试在ListView使用固定高度的ViewPagerViewPager不支持wrap_content