【问题标题】:how to show fragment with recyclerview in MainActivity如何在 MainActivity 中使用 recyclerview 显示片段
【发布时间】:2017-12-15 11:20:20
【问题描述】:

我有一个片段,其中我通过 recyclerview 显示由两个文本视图和 3 个图像按钮组成的列表项。我的片段被添加到主要活动中,但应用程序启动时回收器视图不可见

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/placeholder"
    tools:context="com.example.anonymous.note_taking_app.MainActivity">

</FrameLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="16dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        app:layout_constraintBottom_toTopOf="@+id/detail"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.025"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.615" />

    <ImageButton
        android:id="@+id/delete"
        android:layout_width="44dp"
        android:layout_height="48dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.272"
        app:layout_constraintStart_toEndOf="@+id/edit"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.017"
        app:srcCompat="@drawable/delete" />

    <ImageButton
        android:id="@+id/edit"
        android:layout_width="51dp"
        android:layout_height="48dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="12dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/share"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.017"
        app:srcCompat="@drawable/edit"
        android:layout_marginLeft="12dp" />

    <ImageButton
        android:id="@+id/share"
        android:layout_width="47dp"
        android:layout_height="50dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="212dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.017"
        app:srcCompat="@drawable/share"
        android:layout_marginLeft="212dp" />

    <TextView
        android:id="@+id/detail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="436dp"
        android:layout_marginEnd="308dp"
        android:layout_marginStart="8dp"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.8"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginRight="308dp"
        android:layout_marginLeft="8dp" />

</android.support.constraint.ConstraintLayout>

list_fragment.java

package com.example.anonymous.note_taking_app;

import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;

import java.util.ArrayList;

/**
 * Created by Anonymous on 12/13/2017.
 */

public class ListFragment extends Fragment
{
    RecyclerView recyClerView;
    RecyclerView.Adapter adapter;
    RecyclerView.LayoutManager layoutManager;
    ArrayList<ListItem> it;

    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
    {
        it = new ArrayList<>();
        View view = inflater.inflate(R.layout.fragment_list, parent, false);

        for(int i=0;i<=20;i++)
        {
             ListItem t = new ListItem("Umair","qwertyuio",R.drawable.share,R.drawable.edit,R.drawable.delete) ;
             it.add(t);
        }


        recyClerView=(RecyclerView) view.findViewById(R.id.recycle);
        com.example.anonymous.note_taking_app.ListAdapter l = new com.example.anonymous.note_taking_app.ListAdapter(it);
        recyClerView.setAdapter(l);
        recyClerView.setLayoutManager(layoutManager);

        return view;

    }
}

ListAdapter.java

package com.example.anonymous.note_taking_app;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by Anonymous on 12/13/2017.
 */

public class ListAdapter extends RecyclerView.Adapter
{


    private ArrayList<ListItem> i;
    Context context;

    public ListAdapter(ArrayList<ListItem> i)
    {
        this.i=i;

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false);
        holderclas h = new holderclas(view);
        return h;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        ((holderclas) holder).bindview(position);
    }

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




   /* @Override
    public ListAdapter.holderclas onCreateViewHolder(ViewGroup parent, int viewType)
    {

        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false);
        holderclas h = new holderclas(view);
        return h;
    }

    @Override
    public void onBindViewHolder(ListAdapter.holderclas holder, int position)
    {
        ListItem it = i.get(position);
        holder.title.setText(it.getNoteTitle());
        holder.details.setText(it.getNoteDetail());
        holder.shareimagebutton.setImageResource(it.getShareImageButton());
        holder.editimagebutton.setImageResource(it.getShareImageButton());
        holder.deleteimagebutton.setImageResource(it.getDeleteImageButton());
    }

    @Override
    public int getItemCount() {
        return i.size();
    }*/

    public class holderclas extends RecyclerView.ViewHolder
    {

        TextView title;
        TextView details;
        ImageButton shareimagebutton;
        ImageButton editimagebutton;
        ImageButton deleteimagebutton;

        public holderclas(View itemView)
        {

            super(itemView);
            title=(TextView) itemView.findViewById(R.id.title);
            details=(TextView) itemView.findViewById(R.id.detail);
            shareimagebutton=(ImageButton) itemView.findViewById(R.id.share);
            editimagebutton=(ImageButton) itemView.findViewById(R.id.edit);
            deleteimagebutton=(ImageButton) itemView.findViewById(R.id.delete);

        }

        public void bindview(int position)
        {
            ListItem it = i.get(position);
            title.setText(it.getNoteTitle());
            details.setText(it.getNoteDetail());
            shareimagebutton.setImageResource(it.getShareImageButton());
            editimagebutton.setImageResource(it.getShareImageButton());
            deleteimagebutton.setImageResource(it.getDeleteImageButton());
        }
    }
}

MainActivity.java

package com.example.anonymous.note_taking_app;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

        ListFragment f= new ListFragment();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.placeholder,f);
       // ft.add(R.id.placeholder,f);
        ft.commit();
    }
}

fragment_list.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">




    <android.support.v7.widget.RecyclerView
        android:layout_width="368dp"
        android:layout_height="495dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:id="@+id/recycle"/>

</android.support.constraint.ConstraintLayout>

【问题讨论】:

    标签: java android android-fragments android-recyclerview


    【解决方案1】:

    您忘记在您的ListFragment 中初始化您的layoutManager

    如果你想要VERTICAL而不是使用这个

    layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    

    如果你想要HORIZONTAL而不是使用这个linearLayoutManager

    layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
    

    EDIT 使您的 list_item.xml 高度为 android:layout_height="wrap_content" ,如下面的代码

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    

    【讨论】:

    • @Nillu 我已经在我的 listitem.xml 中进行了这些更改,但是,我的每个列表项都占据了整个屏幕并且要查看我向下滚动屏幕的列表项
    • @Johonsmuthio 没有让你成为我的朋友
    • @Johonsmuthio 我的单个列表项占据了整个屏幕的高度。我希望它的高度只是包装内容。我的一个列表项正在整个屏幕上查看下一个列表项我必须在屏幕上滚动
    • @Johonsmuthio 你做了 android:layout_height="wrap_content" 给你 recyclerviw 项目布局
    • @Johonsmuthio 是的,我这样做了,但仍然是同样的问题
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多