【问题标题】:Recycler View not opening within a Relative Layout. No compilation errors回收站视图未在相对布局中打开。没有编译错误
【发布时间】:2015-10-20 21:58:54
【问题描述】:

我有一个使用相对布局的片段。在该 XML 中,我有两个视图 - TextView 和 RecyclerView

没有编译错误,但在运行应用程序时 RecyclerView 中的卡片不显示:

这是片段代码:

package com.hfad.bitsandpizzas;


import android.content.Intent;
import android.os.Bundle;
import android.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

public class TopFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        RelativeLayout layout = (RelativeLayout)inflater.inflate(R.layout.fragment_top, container, false);
        RecyclerView pizzaRecycler = (RecyclerView)layout.findViewById(R.id.pizza_recycler);
        String[] pizzaNames = new String[2];
        for(int i=0; i<2; i++){
            pizzaNames[i]=Pizza.pizzas[i].getName();
        }
        int[] pizzaImages = new int[2];
        for(int i=0; i<2; i++){
            pizzaImages[i]=Pizza.pizzas[i].getImageResourceId();
        }
        GridLayoutManager layoutManager = new GridLayoutManager(getActivity(),2);
        pizzaRecycler.setLayoutManager(layoutManager);

        CaptionedImagesAdapter adapter = new CaptionedImagesAdapter(pizzaNames, pizzaImages);
        pizzaRecycler.setAdapter(adapter);

        adapter.setListener(new CaptionedImagesAdapter.Listener() {
            @Override
            public void onClick(int position){
                Intent intent = new Intent(getActivity(), PizzaDetailActivity.class);
                intent.putExtra(PizzaDetailActivity.EXTRA_PIZZANO, position);
                getActivity().startActivity(intent);
            }
        });
        return layout;
    }


}

这是布局 XML:

<RelativeLayout
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=".MainActivity">


<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/title_top"
    android:id="@+id/top_text"/>

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/pizza_recycler"
    android:layout_below="@+id/top_text"
    android:layout_marginTop="10dp"
    android:scrollbars="vertical"/>

这是适配器代码:

package com.hfad.bitsandpizzas;

import android.graphics.drawable.Drawable;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class CaptionedImagesAdapter extends RecyclerView.Adapter<CaptionedImagesAdapter.ViewHolder> {
    private String[] captions;
    private int[] imageIds;
    private Listener listener;

    public CaptionedImagesAdapter(String[] captions, int[] imageIds){
        this.captions = captions;
        this.imageIds = imageIds;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private CardView cardView;
        public ViewHolder(CardView v){
            super(v);
            cardView=v;
        }

    }

    @Override
    public CaptionedImagesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        CardView cv = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.card_captioned_image, parent, false);
        return new ViewHolder(cv);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        CardView cardView = holder.cardView;
        ImageView imageView = (ImageView)cardView.findViewById(R.id.info_image);
        Drawable drawable = cardView.getResources().getDrawable(imageIds[position]);
        imageView.setImageDrawable(drawable);
        imageView.setContentDescription(captions[position]);
        TextView textView = (TextView)cardView.findViewById(R.id.info_text);
        textView.setText(captions[position]);

        cardView.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                if(listener!=null){
                    listener.onClick(position);
                }
            }
        });

    }

    @Override
    public int getItemCount() {
        return captions.length;
    }

    public static interface Listener{
        public void onClick(int position);
    }

    public void setListener(Listener listener){
        this.listener=listener;
    }
}

谢谢!

【问题讨论】:

    标签: android-layout android-fragments material-design android-recyclerview


    【解决方案1】:

    TextView 在布局中的高度设置为“match_parent”。片段也设置为 match_parent 并且由于活动可能以相同的方式设置,这意味着您的 TextView 将占据整个屏幕。

    我导入了您的代码,并且对绕过丢失的对象进行了最小的更改,我能够重现该问题。

    通过将 TextView 的高度更改为“wrap_content”,您将为 RecyclerView 腾出空间。

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 2022-06-10
      • 2020-12-21
      • 2020-12-12
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多