【问题标题】:Android: Slider image viewPager is not showing anythingAndroid:滑块图像 viewPager 没有显示任何内容
【发布时间】:2017-05-27 17:12:54
【问题描述】:

我已经看到了与该主题相关的所有问题,但没有找到解决方案,在我的情况下,viewpager 没有显示任何内容,它的简单图像滑块,而且当我正在交换时出现吐司但没有看到图像和文本,当我添加这些行时(正如其他解决方案所说)

 ((ViewPager) container).addView(iv, 0);
 ((ViewPager) container).addView(tv, 0);

它给了我错误

android.support.v4.view.ViewPager$LayoutParams 无法转换为 android.view.ViewGroup$MarginLayoutParams

这是我的 main.xml 文件(在相对布局内):

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

这是 viewPager 适配器

public class ClsCustomPagerViewAdapter extends PagerAdapter {

int[] layouts;
String[] titles;
LayoutInflater layoutInflater;
Context context;

public ClsCustomPagerViewAdapter(Context context, int[] layouts, 
String[] titles) {
    this.layouts = layouts;
    this.titles = titles;
    this.context = context;
    layoutInflater = LayoutInflater.from(context);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((ViewGroup) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {

    View imageLayout = layoutInflater.inflate(R.layout.image_placeholder
, container);
    TextView tv = (TextView) imageLayout.findViewById(R.id.tv);
    ImageView iv = (ImageView) imageLayout.findViewById(R.id.iv);
    Toast.makeText(context,
            "Viewpagers " + titles[position] ,
            Toast.LENGTH_SHORT).show();

    tv.setText(titles[position]);
    iv.setImageResource(layouts[position]);

    ((ViewPager) container).addView(iv, 0);
    ((ViewPager) container).addView(tv, 0);
    return imageLayout;
}

@Override
public int getCount() {
    return layouts.length;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
}

这是 viewpager 适配器的图像和文本视图的布局(在 framelayout 内)

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv"
    android:text="Hello world"
    android:gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:layout_alignTop="@+id/iv"
    android:layout_alignBottom="@+id/iv"
    android:layout_alignLeft="@+id/iv"
    android:layout_alignRight="@+id/iv"/>

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/iv"
    />

【问题讨论】:

    标签: java android layout android-viewpager adapter


    【解决方案1】:

    替换这两行代码

    ((ViewPager) container).addView(iv, 0);
    ((ViewPager) container).addView(tv, 0);
    

    container.addView(imageLayout);
    

    已编辑:

    还有

    View imageLayout = layoutInflater.inflate(R.layout.image_placeholder
    , container);
    

    View imageLayout = layoutInflater.inflate(R.layout.image_placeholder
    , container, false);
    

    【讨论】:

    • 现在说:java.lang.StackOverflowError: stack size 8MB
    • 传递 null 和容器进行 inflate 有什么区别
    • 很抱歉,我可能从我的应用程序中为您提供了旧代码。我最近刚刚阅读了这篇解释这个问题的文章。链接在这里。去看看吧。 possiblemobile.com/2013/05/layout-inflation-as-intended
    • 通过提供 null,您告诉充气机不要将布局附加到任何父级。即通过将父级本身提供为 null。但在那篇文章中,我发现最好的方法是提供正确的父布局并告诉充气机不要自动将布局附加到父布局。我已经编辑了我的答案
    • 我实践过,我有一个问题,为什么我们必须首先不附加到父级(在本例中为 ViewPager)以获取其布局参数,然后再将视图添加到父级,为什么我们可以'不附加到父级并设置资源如果我这样做我什么都看不到,我们必须手动添加视图,为什么我们不能只附加到父级并设置资源然后去
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多