2015-11-09 52 views
2

我在我的应用程序中实现了RecyclerView以显示片段中的图像列表。但是无论何时碎片打开,列表都保持为空,也就是说,不会显示图像。我错过了什么?我相对较新的机器人,所以去容易:pRecyclerView不显示任何图像

也让我知道如果你想任何其他文件。

我的片段:

公共类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); 
     } 
    } 
} 

fragment.xm升

<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> 
+0

,回收商视图高度设置为'wrap_content'或'match_parent'? – Droidekas

+0

@Droidekas它的wrap_content。 –

+0

让它匹配,你不能包装一个可滚动的视图。 – Droidekas

回答

0

可以请你交换这两条线

尝试更换此

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

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

我确实改变了它们,但它没有工作:(。其他建议? –

0

我曾面临这样的问题,在我的情况我已经像这样解决它。

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(); 
    } 
    } 
在你的片段布局XML
+0

它引发了一个致命异常: 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) at java.util.AbstractList.add(AbstractList.java:425) –

+0

它是什么行显示异常?您能发送完整的logcat错误吗? –