RecyclerView无法正常显示(蜷缩)

时间:2017-07-25 08:40:21

标签: android android-layout android-recyclerview android-toolbar android-cardview

我一直在尝试在作为折叠标签一部分的布局中实现多个RecyclerView。但是,我的RecyclerView没有工作,我不知道我的代码中出错了什么。请帮帮我!

这是Github链接:github.com/arxbombus/RecipeDetails

以下是所需的观点:image

以下是我出于某种原因所得到的:image

正如你所看到的,一切都被碾碎了。 :(

下面我列出了我的MainActivity的布局以及我的适配器的Java文件。

这是我的activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbarLayout"
            android:layout_width="match_parent"
            android:layout_height="400dp"
            app:title="Some Randome Recipe"
            app:titleEnabled="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/ivParallax"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/food"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.7" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/nestedScrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txtAbout"
                android:text="About this recipe"
                android:textStyle="bold"
                android:textSize="13sp"
                android:padding="15dp"
                android:layout_marginBottom="-25dp"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txtRecipeDescription"
                android:text="@string/recipe_description"
                android:padding="15dp"
                android:layout_marginBottom="-5dp"
                android:textSize="12sp"/>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/colorDivider"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txtInfo"
                android:text="Info"
                android:textStyle="bold"
                android:textSize="13sp"
                android:padding="15dp"
                android:layout_marginBottom="-20dp"
                android:layout_marginTop="-5dp"/>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rvRecipeInfo"
                android:layout_width="match_parent"
                android:layout_height="75dp"
                android:layout_gravity="center_vertical"
                android:orientation="horizontal"
                android:padding="15dp"></android.support.v7.widget.RecyclerView>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/colorDivider"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txtIngredient"
                android:text="Ingredients"
                android:textStyle="bold"
                android:textSize="13sp"
                android:padding="15dp"
                android:layout_marginBottom="-20dp"
                android:layout_marginTop="-5dp"/>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rvRecipeIngredient"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="15dp"></android.support.v7.widget.RecyclerView>

            <Button
                android:id="@+id/button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Button" />

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/colorDivider"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                />


            walking
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/txtProcedures"
                android:text="Procedures"
                android:textStyle="bold"
                android:textSize="13sp"
                android:padding="15dp"
                android:layout_marginBottom="-20dp"
                android:layout_marginTop="-5dp"/>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rvRecipeProcedure"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:padding="15dp"></android.support.v7.widget.RecyclerView>



        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

我的CardView

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recipeInfoCards"
    android:layout_width="81dp"
    android:layout_height="75dp"
    app:cardCornerRadius="6dp"
    android:elevation="15dp"
    android:orientation="horizontal"
    >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorRecipeInfoCardBG"
    android:padding="10dp"
    android:orientation="vertical">


    <TextView
        android:id="@+id/txtRecipeInfoCardTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cooking Time:"
        android:textSize="11sp"
        android:textColor="@android:color/black"
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:layout_marginTop="5dp"
/>

    <TextView
        android:id="@+id/txtRecipeInfoCardDescription"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="20 Minutes"
        android:textSize="11sp"
        android:textColor="@color/colorTextSecondary"
        android:layout_gravity="center_horizontal"
        android:gravity="center"/>


</LinearLayout>

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

以下是我的MainActivity和适配器

public class MainActivity extends AppCompatActivity {

  ArrayList < Recipe > recipeData;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);

    recipeData = new ArrayList < Recipe > ();
    createData();


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    RecyclerView recipeInfoCardRV = (RecyclerView) findViewById(R.id.rvRecipeInfo);
    recipeInfoCardRV.setHasFixedSize(true);
    recipeInfoCardRV.setNestedScrollingEnabled(false);
    RecipeInfoAdapter recipeInfoAdapter = new RecipeInfoAdapter(this, recipeData);
    recipeInfoCardRV.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
    recipeInfoCardRV.setAdapter(recipeInfoAdapter);

    RecyclerView recipeIngredientRV = (RecyclerView) findViewById(R.id.rvRecipeIngredient);
    recipeIngredientRV.setHasFixedSize(true);
    recipeIngredientRV.setNestedScrollingEnabled(false);
    recipeIngredientRV.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    RecipeIngredientAdapter recipeIngredientAdapter = new RecipeIngredientAdapter(this, recipeData);
    recipeIngredientRV.setAdapter(recipeIngredientAdapter);
  }

  public void createData() {
    ArrayList < RecipeInfoCard > recipeInfoCards = new ArrayList < RecipeInfoCard > ();
    recipeInfoCards.add(new RecipeInfoCard("Cooking Time", "20 Minutes"));
    recipeInfoCards.add(new RecipeInfoCard("Calories", "3501"));
    recipeInfoCards.add(new RecipeInfoCard("Procedures", "Three"));


    ArrayList < RecipeIngredient > recipeIngredients = new ArrayList < RecipeIngredient > ();
    for (int i = 1; i <= 10; i++) {
      recipeIngredients.add(new RecipeIngredient("Ingredient " + i, String.valueOf(i), "grams"));
    }

    Recipe dm = new Recipe(recipeInfoCards, recipeIngredients);
    recipeData.add(dm);
  }

}

我的CardView

的适配器

public class RecipeInfoAdapter extends RecyclerView.Adapter < RecipeInfoAdapter.RecipeInfoCardItemRowHolder > {

  private Context mContext;
  private ArrayList < Recipe > recipeData;

  public RecipeInfoAdapter(Context mContext, ArrayList < Recipe > recipeData) {
    this.mContext = mContext;
    this.recipeData = recipeData;
  }

  @Override
  public RecipeInfoCardItemRowHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recipe_info_card_view, null);
    return new RecipeInfoCardItemRowHolder(v);
  }

  @Override
  public void onBindViewHolder(RecipeInfoCardItemRowHolder recipeInfoCardItemRowHolder, int position) {
    Recipe recipe = recipeData.get(position);
    recipeInfoCardItemRowHolder.infoCardTitle.setText(recipe.getRecipeInfoCards().get(position).getRecipeInfoCardTitle());
    recipeInfoCardItemRowHolder.infoCardDescription.setText(recipe.getRecipeInfoCards().get(position).getRecipeInfoCardDescription());
  }

  @Override
  public int getItemCount() {
    return (null != recipeData ? recipeData.size() : 0);
  }

  public class RecipeInfoCardItemRowHolder extends RecyclerView.ViewHolder {
    protected TextView infoCardTitle;
    protected TextView infoCardDescription;

    public RecipeInfoCardItemRowHolder(View view) {
      super(view);
      this.infoCardTitle = (TextView) view.findViewById(R.id.txtRecipeInfoCardTitle);
      this.infoCardDescription = (TextView) view.findViewById(R.id.txtRecipeInfoCardDescription);
    }
  }
}

我没有把我的所有代码都放在这里,因为我认为这个问题足够长,但如果有人帮助我,我真的很感激。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试更改你的rvRecipeInfo RecyclerView高度..因为你的硬度是75 dp,这是错误的。

<android.support.v7.widget.RecyclerView
                android:id="@+id/rvRecipeInfo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:orientation="horizontal"
                android:padding="15dp"></android.support.v7.widget.RecyclerView>

similer to cardview

< ?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.CardView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/recipeInfoCards"
        android:layout_width="100dp"
        android:layout_height="75dp"
        app:cardCornerRadius="6dp"
        android:elevation="15dp"
        android:orientation="horizontal"
        >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/colorRecipeInfoCardBG"
        android:padding="10dp"
        android:orientation="vertical">


        <TextView
            android:id="@+id/txtRecipeInfoCardTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cooking Time:"
            android:textSize="11sp"
            android:textColor="@android:color/black"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:layout_marginTop="5dp"
    />

        <TextView
            android:id="@+id/txtRecipeInfoCardDescription"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="20 Minutes"
            android:textSize="11sp"
            android:textColor="@color/colorTextSecondary"
            android:layout_gravity="center_horizontal"
            android:gravity="center"/>


    </LinearLayout>

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