java - 在显示空白列表项的ListView中,java ViewPagers

  显示原文与译文双语对照的内容
92 1

收费 : 感谢所有有意义的答案,现在解决问题,感谢你的帮助。类似问题: 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);
 }
}

配置概要文件的数据库工作得很好。问题是,我获得了一个空列表,它的中的项目数量正确,但是没有 ViewPager 显示在。我的应用程序的截图

我做错什么了?

时间:原作者:0个回答

110 5

尝试更改你在xml中的ViewPager 高度。wrap_content 不工作。

原作者:
75 5

为了清楚起见,在列表视图中使用viewpagers是一个不好的实践,因为这个设计在用户界面。处理这里问题的最佳方法是:

手动膨胀viewpagers并添加到布局中。

向每个viewpager添加唯一标识,以便系统唯一标识它。

  • 扩展自定义viewpager和 onmeasure() 测量在所选页面上缩放的子布局。在自定义viewpager中设置回调并从 viewpagers onPageScrolled监听器触发回调,从而确定子布局的位置,这样做可以做到这一点。
  • 在 onMeaure() 方法中测量子布局高度并将它的设置为viewpagers高度,使用 super.onMeasure() 传递新测量的规格。

要注意的要点,请注意:

N.B 将一个唯一的id设置为由你指定的inflated 。

原作者:
...