“ E / RecyclerView:未连接适配器;跳过布局”

问题描述 投票:0回答:1

因此,对于一个个人项目,我正在为Android开发一个流应用程序,该应用程序在主屏幕中由三个片段分隔,每个片段将是我们档案库中某种类型的节目的列表,例如电影,电视剧和动画,方法是在其中使用RecyclerView。

话虽这么说,但在我设法解决了一些错误之后,该应用并未显示出预期的效果,因为它没有“适配器”,因此跳过了RecyclerView。

这里是到目前为止的代码:

主要活动:

public class MenuPrincipal extends AppCompatActivity {

    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu_principal);

        AbasMenuPrincipalAdapter adapter = new AbasMenuPrincipalAdapter( getSupportFragmentManager() );
        adapter.adicionar( new FilmesFragment() , "Filmes");
        adapter.adicionar( new SeriesFragment() , "Series");
        adapter.adicionar( new AnimacoesFragment() , "Animações");


        ViewPager viewPager = (ViewPager) findViewById(R.id.abas_view_pager);
        viewPager.setAdapter(adapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.abas);
        tabLayout.setupWithViewPager(viewPager);

    }
}

主屏幕上使用的片段之一:

public class AnimacoesFragment extends Fragment {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    ArrayList<Item> exemploItemList = new ArrayList<Item>();

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

        View view = inflater.inflate(R.layout.animacoes_fragment, container, false);

        TextView tv = view.findViewById(R.id.text1);
        tv.setText("Você está na terceira aba");

        exemploItemList.add(new Item(R.drawable.ic_android, "Line1", "line2"));
        exemploItemList.add(new Item(R.drawable.ic_desktop_mac, "Line2", "line3"));
        exemploItemList.add(new Item(R.drawable.ic_laptop_windows, "Line4", "line5"));

        mRecyclerView = (RecyclerView) view.findViewById(R.id.AnimacaoRecyclerView);

        mRecyclerView.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        llm.setOrientation(LinearLayoutManager.VERTICAL);
        mRecyclerView.setLayoutManager(llm);
        ItemAdapter adapter = new ItemAdapter(exemploItemList);
        mAdapter = adapter;
        mRecyclerView.setAdapter(mAdapter);

        return view;
    }
}

及其布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/AnimacaoRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="4dp"
        android:scrollbars="vertical" />

</LinearLayout>

这是我要在RecyclerView上显示的内容(以后将是真实的东西,现在只是一个测试):

public class Item {
    private int mImageResource;
    private String text1;
    private String text2;

    public Item(int mImageResource, String text1, String text2) {
        this.mImageResource = mImageResource;
        this.text1 = text1;
        this.text2 = text2;
    }
    public int getmImageResource() {
        return mImageResource;
    }
    public void setmImageResource(int mImageResource) {
        this.mImageResource = mImageResource;
    }
    public String getText1() {
        return text1;
    }
    public void setText1(String text1) {
        this.text1 = text1;
    }
    public String getText2() {
        return text2;
    }
    public void setText2(String text2) {
        this.text2 = text2;
    }
}

它的布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardCornerRadius="4dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="4dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:contentDescription="@string/imagem"
        android:padding="2dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="50dp"
        android:layout_marginTop="0dp"
        android:text="@string/line1"
            android:textColor="#000000"
            android:textSize="20sp"
            android:textStyle="bold"
            android:id="@+id/textView"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="50dp"
            android:layout_marginTop="28dp"
            android:text="@string/line2"
            android:textSize="15sp"
            android:textStyle="bold"
            android:id="@+id/textView2"/>
    </RelativeLayout>
</androidx.cardview.widget.CardView>

最后,用于转换列表的适配器:

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {

    private ArrayList<Item> mItemList;

    public static class ItemViewHolder extends RecyclerView.ViewHolder{
        public ImageView mImageView;
        public TextView mTextView1;
        public TextView mTextView2;

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);

            mImageView = itemView.findViewById(R.id.imageView);
            mTextView1 = itemView.findViewById(R.id.textView);
            mTextView2 = itemView.findViewById(R.id.textView2);

        }
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        ItemViewHolder ivh = new ItemViewHolder(v);
        return ivh;
    }

    public ItemAdapter(ArrayList<Item> itemList){
        mItemList = itemList;
    }

    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
        Item currentItem = mItemList.get(position);

        holder.mImageView.setImageResource(currentItem.getmImageResource());
        holder.mTextView1.setText(currentItem.getText1());
        holder.mTextView2.setText(currentItem.getText2());
    }

    @Override
    public int getItemCount() {
        return mItemList.size();
    }
}
java android android-studio android-recyclerview recycler-adapter
1个回答
1
投票

首先,检查您的片段布局文件。线性布局父方向设置为“水平”,其子视图的宽度(“ textview”和“ recyclerview”)为匹配父视图。这行不通。在使用recyclerview设置适配器后,尝试在“ onCreate”中初始化recyclerview适配器,并使用“ notifyDataSetChanged()”。

© www.soinside.com 2019 - 2024. All rights reserved.