2016-08-25 2 views
0

RecyclerView 내부에있을 때 기본적으로 내 문제는 CardView의 이미지를 볼 수 없습니다.CardView의 이미지가 RecyclerView에 표시되지 않습니다.

나는이 카드를 응용 프로그램의 다른 부분에서 사용하는데 아무런 문제가 없다는 점에 유의할 것. 또한 카드 XML에는 애니메이션과 관련되어 있기 때문에 이와 관련이없는 부분도있다. 그것을 클릭하십시오.

편집

: 나는 동일한 코드를했지만, onCreateViewHolder 단지 이미지를 포함하는 다른 .xml 파일을 팽창하고 완벽하게 일했다 ... 그래서 문제는 이미지와 설명을 표시하지 card_layout.xml로 축소된다. enter image description here

내가 결국 얻는 것은 이것이다 :

난 할 노력하고있어 것은 RecyclerView 내부 디스플레이 인이 카드입니다 enter image description here

일반적으로 내가 다른 레이아웃 매니저를 사용하고 , 하지만 단순화를 위해 표준 LinearLayoutManager를 사용하여 코드를 업로드하고 있는데,이 문제를 위해 중요하지 않은 일부 함수는 비워 둡니다.

단편

public class FavoritesFragment extends Fragment { 

    private static final String TAG = "FavoritesFragment"; 

    private Context mContext; 
    private RecyclerView mRecyclerView; 
    private FavoritesAdapter mFavoritesAdapter; 

    private ArrayList<String> testData; 


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


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

     mContext = getContext(); 

     testData = new ArrayList<>(); 
     testData.add("0"); 
     testData.add("1"); 
     testData.add("2"); 
     testData.add("3"); 
     testData.add("4"); 

     initRecyclerView(layout, testData); 

     return layout; 
    } 



    private void initRecyclerView(View layout, ArrayList<String> testData) { 

     mRecyclerView = (RecyclerView)layout.findViewById(R.id.recyclerViewFavorites); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(mContext)); 
     mRecyclerView.setHasFixedSize(true); 
     mRecyclerView.setAdapter(new FavoritesAdapter(testData, mContext)); 
     mRecyclerView.addOnScrollListener(new CenterScrollListener()); 
    } 

    private class FavoritesAdapter extends RecyclerView.Adapter<FavoritesAdapter.ViewHolder> { 

     private List<String> data; 
     private Context mContext; 

     // ViewHolder to hold the card 
     public class ViewHolder extends RecyclerView.ViewHolder { 

      private View mContainer; 
      private ImageView mItemImage; 
      private TextView mDescription; 
      private TextView mPrice; 
      private TextView mShippingDate; 

      public ViewHolder(View cardView) { 
       super(cardView); 

       mContainer = cardView.findViewById(R.id.card_container); 
       mItemImage = (ImageView)cardView.findViewById(R.id.card_item_image); 
       mDescription = (TextView)cardView.findViewById(R.id.card_description); 
       mPrice = (TextView)cardView.findViewById(R.id.card_description); 
       mShippingDate = (TextView)cardView.findViewById(R.id.card_shipping); 
      } 
     } 

     public FavoritesAdapter(List<String> data, Context context) { 
      mContext = context; 
      this.data = data; 
     } 

     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(mContext).inflate(R.layout.card_layout, parent, false); 

      return new ViewHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(ViewHolder holder, int position) { 

     } 

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


    } 

} 

fragment_favorites.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="com.panasonixx.asosplus.FavoritesFragment"> 

    <android.support.v7.widget.RecyclerView 
      android:id="@+id/recyclerViewFavorites" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_centerInParent="true" /> 

</FrameLayout> 

당신은 onBindViewHolder 방법으로 행이 좋아 사용하는 뷰를 바인딩되지 않습니다

<android.support.v7.widget.CardView xmlns:cardview="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/card_container" 
    cardview:cardCornerRadius="2dp" 
    cardview:cardElevation="4dp" 
    cardview:cardUseCompatPadding="true"> 

    <RelativeLayout 
     android:id="@+id/relativeLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <FrameLayout 
      android:id="@+id/frameLayout" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_alignParentBottom="false" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentEnd="false" 
      android:layout_alignParentStart="false" 
      android:layout_above="@+id/card_description"> 

      <LinearLayout 
       android:id="@+id/linearView" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:background="@android:color/holo_purple" 
       android:gravity="center_vertical" 
       android:orientation="vertical" 
       android:visibility="gone"> 

       <LinearLayout 
        android:id="@+id/layoutButtons" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        android:orientation="vertical" 
        android:visibility="gone"> 

        <Button 
         style="@style/Widget.AppCompat.Button.Colored" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="@dimen/activity_vertical_margin" 
         android:text="@string/card_reveal_buy" /> 

        <Button 
         style="@style/Widget.AppCompat.Button.Colored" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginBottom="@dimen/activity_vertical_margin" 
         android:text="@string/card_reveal_share" /> 

        <Button 
         style="@style/Widget.AppCompat.Button.Colored" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/card_reveal_favorite" /> 


       </LinearLayout> 

      </LinearLayout> 

      <ImageView 
       android:id="@+id/card_item_image" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:adjustViewBounds="true" 
       android:contentDescription="@string/image" 
       android:src="@drawable/test_image" 
       android:scaleType="centerCrop" 
       android:layout_gravity="center_horizontal|top" /> 

     </FrameLayout> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/price" 
      android:id="@+id/card_price" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentStart="true" 
      android:layout_margin="2dp" /> 

     <TextView 
      android:layout_width="80dp" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/shipping" 
      android:id="@+id/card_shipping" 
      android:textAlignment="viewEnd" 
      android:layout_alignTop="@+id/card_price" 
      android:layout_alignParentEnd="true" 
      android:layout_marginLeft="2dp" 
      android:layout_marginRight="2dp" 
      android:layout_marginTop="2dp" 
      android:layout_marginBottom="2dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:text="@string/desc" 
      android:id="@+id/card_description" 
      android:textAlignment="center" 
      android:layout_above="@+id/card_price" 
      android:layout_alignParentStart="true" 
      android:layout_alignEnd="@+id/card_shipping" 
      android:layout_marginBottom="8dp" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/card_image_description" 
      android:id="@+id/card_shipping_icon" 
      android:src="@drawable/ic_local_shipping" 
      android:layout_alignTop="@+id/card_shipping" 
      android:layout_toStartOf="@+id/card_shipping" /> 


    </RelativeLayout> 


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

답변

0

card_layout.xml :

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position) { 
    final ViewHolder myHolder = (ViewHolder) holder; 
    Favourite fav=Favourites.get(position); 
    holder.mItemImage.setImageBitmap etc ... 
+0

나는 card_layout.xml을 직접 팽창시키고있다. 나는 어떤 데이터도 사용하고 있지 않다. 그런 식으로 될 것이지만 지금은 단지 그것을보고 싶을 뿐이다. – bluesummers

+0

그런 다음 가짜 데이터에 정수를 정의하고' 이미지의 src를 이미 정의한 XML을 부 풀려도 R.drawable.yourdrawable' –

+1

이 필요합니까? – bluesummers

0

나는 경우, 이미지에 이미지를 설정하는 걸 깜박 했네. 전망. 즉, mItemImage.setImageResource (R.drawable.apple);

this

+1

리소스가 이미 XML 파일에 첨부되어 있습니다. ViewHolder가 지금까지 아무 것도하지 않고 있으며, 향후 기능을위한 템플릿 일뿐입니다. – bluesummers

0

가 갈 수있는 몇 가지있다 참조하십시오.

우선은, 그 이미지의 크기는 무엇인가? 꽤 큰 경우 비트 맵을 제대로로드하지 못할 수 있습니다. 나는 그것이 응용 프로그램의 다른 부분에로드하는 경우이 문제는 의심하지 않지만, 확실히 배려.

당신은 당신의 레이아웃에 대한 이상한 셋업의 종류 있어요. 중첩 된 레이아웃이 성능에 영향을 줄 수 있으므로 최대한 많이 사용하지 않는 것이 좋습니다. 애니메이션으로 인해 물건을 생략했다는 언급을 들었지만 어느 정도 변경하는 것이 좋습니다. 레이아웃이 어떻게 보이는지 전체 그림을 줄 수 있다면, 이것을 조정할 수 있습니다.

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:cardview="http://schemas.android.com/apk/res-auto" 
android:id="@+id/card_container" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
cardview:cardCornerRadius="2dp" 
cardview:cardElevation="4dp" 
cardview:cardUseCompatPadding="true"> 

<RelativeLayout 
    android:id="@+id/relativeLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:id="@+id/layoutButtons" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:orientation="vertical" 
     android:visibility="gone"> 

     <Button 
      style="@style/Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/activity_vertical_margin" 
      android:text="buy" /> 

     <Button 
      style="@style/Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/activity_vertical_margin" 
      android:text="share" /> 

     <Button 
      style="@style/Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="reveal" /> 

    </LinearLayout> 

    <ImageView 
     android:id="@+id/card_item_image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|top" 
     android:adjustViewBounds="true" 
     android:contentDescription="image" 
     android:scaleType="centerCrop" 
     android:layout_above="@+id/card_price" 
     android:src="@drawable/ic_dashboard_black_24dp" /> 

    <TextView 
     android:id="@+id/card_price" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentStart="true" 
     android:layout_margin="2dp" 
     android:text="price" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/card_shipping" 
     android:layout_width="80dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignTop="@+id/card_price" 
     android:layout_marginBottom="2dp" 
     android:layout_marginLeft="2dp" 
     android:layout_marginRight="2dp" 
     android:layout_marginTop="2dp" 
     android:text="shipping" 
     android:textAlignment="viewEnd" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/card_description" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/card_price" 
     android:layout_alignEnd="@+id/card_shipping" 
     android:layout_alignParentStart="true" 
     android:layout_marginBottom="8dp" 
     android:text="desc" 
     android:textAlignment="center" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <ImageView 
     android:id="@+id/card_shipping_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/card_shipping" 
     android:layout_toStartOf="@+id/card_shipping" 
     android:contentDescription="desc" 
     android:src="@drawable/ic_event_black_24dp" /> 

</RelativeLayout> 

기회는, 당신은 버튼이있는 LinearLayout을 제거 할 수 있어야하지만, 당신이 가고 싶어 어디 정말 말할 수 없습니다 :하지만 여기에 거친 생각입니다.

도움이되는지 알려주세요.

+1

여기에서 카드 템플릿을 사용하고 있지만 답변은 Ryan에게 감사드립니다. https://github.com/ 4k3R/material-sharing-card 그 이유는 중첩 된 레이아웃이 필요합니다. 배경 팝핑을위한 레이아웃과 두 번째 버튼의 표시가 필요합니다. – bluesummers

관련 문제