【问题标题】:RecyclerView not showing any imagesRecyclerView 不显示任何图像
【发布时间】:2015-11-09 11:02:41
【问题描述】:

我正在我的应用中实现 RecyclerView 以在片段中显示图像列表。但是,无论何时打开片段,列表都是空的,即不显示任何图像。我错过了什么?我对android比较陌生,所以放轻松:p

如果您需要任何其他文件,也请告诉我。

我的片段:

公共类 SponsorsFragment 扩展片段 {

    public static int[] sponsorImageId = {
            R.drawable.apr,
            R.drawable.bigsandwich,
            R.drawable.bodal,
            R.drawable.brijeel
    };
    RecyclerView sponsorRecyclerView;

    public SponsorsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_sponsors, container, false);

        sponsorRecyclerView = (RecyclerView) view.findViewById(R.id.sponsor_recycler_view);
        ImageAdapter imageAdapter = new ImageAdapter(getActivity(), getImageData());
        sponsorRecyclerView.setAdapter(imageAdapter);
        sponsorRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        return view;
    }

    public static List<ImageId> getImageData() {
        List<ImageId> data = new ArrayList<>();
        for (int i = 0; i < sponsorImageId.length; i++) {
            ImageId current = new ImageId();
            current.id = sponsorImageId[i];
            data.add(current);
        }
        return data;
    }
}

list_for_sponsors.xml:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/image_for_sponsors"
        android:src="@drawable/brijeel">
    </ImageView>

</LinearLayout>

ImageAdapter.java:

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyImageViewHolder> {

    private LayoutInflater inflater;
    private Context context;
    private List<ImageId> images = Collections.emptyList();

    public ImageAdapter(Context c, List<ImageId> data) {
        context = c;
        inflater = LayoutInflater.from(context);
        images = data;
        Log.e("RecyclerView", "Error " + images.size());

    }

    @Override
    public MyImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.list_for_sponsors, parent, false);
        MyImageViewHolder holder = new MyImageViewHolder(view);
        return holder;
    }

    @Override
    public int getItemCount() {
        return images.size();
    }

    @Override
    public void onBindViewHolder(MyImageViewHolder holder, int position) {
        ImageId current = images.get(position);
        Log.e("RecyclerView", "" + current.id);
        holder.imageView.setImageResource(current.id);
    }

    class MyImageViewHolder extends RecyclerView.ViewHolder{
        public ImageView imageView;

        public MyImageViewHolder(View view) {
            super(view);
            imageView = (ImageView) view.findViewById(R.id.image_for_sponsors);
        }
    }
}

片段.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="in.djtrinity.www.trinity.AboutFragment">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="8dp"
        android:id="@+id/sponsor_recycler_view">

    </android.support.v7.widget.RecyclerView>

</FrameLayout>

【问题讨论】:

  • 在你的片段布局 xml 中,recycler 视图高度设置为wrap_contentmatch_parent ?
  • @Droidekas 它的 wrap_content。
  • 让它匹配,你不能包裹一个可滚动的视图。
  • 但我确实有其他数据与 recyclerview 一起显示。有其他解决方案吗?
  • 将您的 fragment_layout.xml 添加到问题中。

标签: android android-adapter android-recyclerview


【解决方案1】:

你可以尝试交换这两行

替换这个

sponsorRecyclerView.setAdapter(imageAdapter);
    sponsorRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

sponsorRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
sponsorRecyclerView.setAdapter(imageAdapter);

【讨论】:

  • 我确实改变了它们,但没有用:(。还有其他建议吗?
【解决方案2】:

我遇到过这样的问题,就我而言,我已经解决了。

public static int[] sponsorImageId = {
        R.drawable.apr,
        R.drawable.bigsandwich,
        R.drawable.bodal,
        R.drawable.brijeel
};
RecyclerView sponsorRecyclerView;
ImageAdapter imageAdapter;

public SponsorsFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_sponsors, container, false);

    sponsorRecyclerView = (RecyclerView) view.findViewById(R.id.sponsor_recycler_view);
     List<ImageId> emptylist = Collections.emptyList();
     imageAdapter = new ImageAdapter(getActivity(), emptylist);
    sponsorRecyclerView.setAdapter(imageAdapter);
    sponsorRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    setImages();
    return view;
}

public static void setImages() {
    for (int i = 0; i < sponsorImageId.length; i++) {
        ImageId current = new ImageId();
        current.id = sponsorImageId[i];
       imageAdapter.addData(current);
    }

}
}

现在改变 ImageAdapter 如下:-

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyImageViewHolder> {

private LayoutInflater inflater;
private Context context;
private List<ImageId> images = Collections.emptyList();

public ImageAdapter(Context c, List<ImageId> data) {
    context = c;
    inflater = LayoutInflater.from(context);
    images = data;
    Log.e("RecyclerView", "Error " + images.size());

}

@Override
public MyImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.list_for_sponsors, parent, false);
    MyImageViewHolder holder = new MyImageViewHolder(view);
    return holder;
}

@Override
public int getItemCount() {
    return images.size();
}

@Override
public void onBindViewHolder(MyImageViewHolder holder, int position) {
    ImageId current = images.get(position);
    Log.e("RecyclerView", "" + current.id);
    holder.imageView.setImageResource(current.id);
}

class MyImageViewHolder extends RecyclerView.ViewHolder{
    public ImageView imageView;

    public MyImageViewHolder(View view) {
        super(view);
        imageView = (ImageView) view.findViewById(R.id.image_for_sponsors);
    }
}
 public void addData(ImageId current){
      images.add(current);
     notifyDataSetChanged();
  }
  }

【讨论】:

  • 它抛出一个致命的异常:11-10 08:54:18.470 24917-24917/in.djtrinity.www.trinity E/AndroidRuntime: java.lang.UnsupportedOperationException at java.util.AbstractList.add (AbstractList.java:404) 在 java.util.AbstractList.add(AbstractList.java:425)
  • 在哪一行显示异常?你能发送完整的 logcat 错误吗?
猜你喜欢
  • 2021-03-10
  • 2021-12-11
  • 2021-10-28
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多