简体   繁体   English

父 RecyclerView 中的子 RecyclerView 显示在父 RecyclerView 的末尾?

[英]Child RecyclerView inside Parent RecyclerView is showing at End of Parent RecyclerView?

Child RecyclerView inside Parent RecyclerView is showing at End of Parent RecyclerView?父 RecyclerView 中的子 RecyclerView 显示在父 RecyclerView 的末尾?

I Want To Show Categroy in Parent RecyclerView & show its Sub Category in Child RecyclerView But When I Click Parent RecyclerView To Show That Sub Category the Child RecyclerView is showing at The Full End Of Parent Category Please Check Where Is I'm Wrong?我想在父 RecyclerView 中显示类别并在子 RecyclerView 中显示其子类别但是当我单击父 RecyclerView 以显示该子类别时,子 RecyclerView 显示在父类别的完整末尾请检查我错在哪里?

Here is My Results: First Item Clicked这是我的结果:点击的第一个项目

. . Second Item Clicked点击的第二个项目

My Code:我的代码:

This Is My Main Layout:这是我的主要布局:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".USER.Category">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/Category"/>


</LinearLayout>

This is my Main java File:这是我的主要 java 文件:

   public class Category extends AppCompatActivity {
    static Toast Toasts;
    RecyclerView  Category;

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

        Category = findViewById(R.id.Category);
        Category.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
        Category_View_request();

    }

    public void Category_View_request() {

        RequestQueue requestQueue = Volley.newRequestQueue(Category.this);
        String url = Constant.Category;
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                GsonBuilder gsonBuilder = new GsonBuilder();
                Gson gson = gsonBuilder.create();
                GridView_listItems[] Category_View_response = gson.fromJson(response, GridView_listItems[].class);
                Category.setAdapter(new CategoryView_Adapter(Category.this, Category_View_response));

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toasts = Toast.makeText(Category.this, "ERROR: Please Check Internet & Try Again", Toast.LENGTH_SHORT);
                Toasts.show();
            }
        });
        requestQueue.add(stringRequest);
    }
}

this is Parent Layout:这是父布局:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:padding="5dp"
    android:id="@+id/layout">

<androidx.cardview.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:id="@+id/nameLayout">

        <ImageView
            android:id="@+id/categoryimage"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:adjustViewBounds="true"
            android:background="#fff"
            android:contentDescription="@string/todo"
            android:padding="8dp"
            android:scaleType="fitXY" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal"
            android:paddingLeft="8dp"
            android:paddingTop="8dp"
            android:paddingRight="8dp"
            android:paddingBottom="8dp">

            <Space
                android:layout_width="112dp"
                android:layout_height="wrap_content" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="vertical"
                android:paddingLeft="8dp"
                android:paddingTop="8dp"
                android:paddingRight="8dp"
                android:paddingBottom="8dp">

                <TextView
                    android:id="@+id/categoryname"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:paddingStart="1dp"
                    android:singleLine="true"
                    android:text="@string/test_product_name"
                    android:textColor="@color/Black"
                    android:textSize="13sp"
                    tools:ignore="RtlSymmetry" />


                <TextView
                    android:id="@+id/categorydec"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:paddingStart="1dp"
                    android:paddingTop="3dp"
                    android:singleLine="true"
                    android:text="@string/test_product_description"
                    android:textColor="@color/common_google_signin_btn_text_light_default"
                    android:textSize="12sp"
                    tools:ignore="RtlSymmetry" />

            </LinearLayout>
        </LinearLayout>

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

    </RelativeLayout>

    <androidx.cardview.widget.CardView
        android:id="@+id/subview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@color/White"
        android:elevation="8dp"
        android:paddingTop="10dp"
        >

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/subCatview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

    </androidx.cardview.widget.CardView>

    </LinearLayout>
</androidx.cardview.widget.CardView>

</LinearLayout>

This is Parent Adapter:这是父适配器:

public class CategoryView_Adapter extends RecyclerView.Adapter<CategoryView_Adapter.CategoryViewHolder> {
    Toast Toasts;
    private static Context context;
    private static GridView_listItems[] data;

    public CategoryView_Adapter(Context context, GridView_listItems[] data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public CategoryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.category_view, parent, false);
        return new CategoryViewHolder(view);
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull final CategoryViewHolder holder, int position) {
        final GridView_listItems CategoryList = data[position];

        holder.categoryname.setText(CategoryList.getName());
        holder.categorydec.setText(CategoryList.getId());
        Glide.with(holder.categoryimage.getContext())
                .applyDefaultRequestOptions(new RequestOptions()
                        .placeholder(R.drawable.product_loading)
                        .error(R.drawable.product_loading_failed))
                .load(Constant.MAINImagUrl + CategoryList.getCategoryLogo().substring(2))
                .into(holder.categoryimage);
        holder.categoryname.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.layout.setBackgroundColor(ContextCompat.getColor(context, R.color.common_google_signin_btn_text_light_default));

                Grid_View_request(CategoryList.getName());
            }
        });


    }

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

    public static class CategoryViewHolder extends RecyclerView.ViewHolder {
        ImageView categoryimage;
        TextView categoryname, categorydec;
        CardView subview;
        RelativeLayout click;
        LinearLayout layout;
        public static RecyclerView subCatview;

        public CategoryViewHolder(@NonNull View itemView) {
            super(itemView);
            categoryimage = (ImageView) itemView.findViewById(R.id.categoryimage);
            categoryname = (TextView) itemView.findViewById(R.id.categoryname);
            categorydec = (TextView) itemView.findViewById(R.id.categorydec);
            click = (RelativeLayout) itemView.findViewById(R.id.click);
            subview = (CardView) itemView.findViewById(R.id.subview);
            layout = (LinearLayout) itemView.findViewById(R.id.layout);
            subCatview = (RecyclerView) itemView.findViewById(R.id.subCatview);

            GridLayoutManager gridLayoutManager = new GridLayoutManager(MyApplication.getAppContext(), 3, GridLayoutManager.VERTICAL, false);
            subCatview.setLayoutManager(gridLayoutManager);


        }
    }


    public static void Grid_View_request(final String category) {

        RequestQueue requestQueue = Volley.newRequestQueue(MyApplication.getAppContext());
        String url = Constant.Sub_Category;
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                if (response.contains("CityGroceryEmptyResponse")) {
                     Toast.makeText(MyApplication.getAppContext(), "No Sub Category Found", Toast.LENGTH_SHORT).show();
                } else {
                    GsonBuilder gsonBuilder = new GsonBuilder();
                    Gson gson = gsonBuilder.create();
                    Sub_Category_list[] Sub_Category_list = gson.fromJson(response, Sub_Category_list[].class);
                    subCatview.setAdapter(new Sub_Category_Adapter(MyApplication.getAppContext(), Sub_Category_list));
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
        Toast.makeText(MyApplication.getAppContext(), "ERROR: Please Check Internet & Try Again", Toast.LENGTH_SHORT).show();
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<String, String>();
                params.put("category", category);
                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("Content-Type", "application/x-www-form-urlencoded");
                return params;
            }
        };
        requestQueue.add(stringRequest);

    }


}

This is My Child Layout:这是我的孩子布局:

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:orientation="horizontal"
    android:elevation="8dp"
    app:cardCornerRadius="1dp">


    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:paddingLeft="8dp"
        android:paddingTop="8dp"
        android:paddingRight="8dp"
        android:paddingBottom="8dp">


        <ImageView
            android:id="@+id/subCatNameimage"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/subCatName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/subCatNameimage"
            android:layout_marginTop="4dp"
            android:gravity="center"
            android:maxLength="30"
            android:text="menu name"
            android:textColor="@color/colorPrimary"
            android:textSize="14sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/subCatNameimage" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

This is My Child Adapter:这是我的孩子适配器:

public class Sub_Category_Adapter extends RecyclerView.Adapter<Sub_Category_Adapter.CategoryViewHolder> {
    Toast Toasts;
    private static Context context;
    private static Sub_Category_list[] data;



    public Sub_Category_Adapter(Context context, Sub_Category_list[] data) {
        this.context = context;
        this.data = data;
        final Sub_Category_list SubCategoryList = data[0];

    }

    @NonNull
    @Override
    public CategoryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.gridview_items, parent, false);
        return new CategoryViewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull final CategoryViewHolder holder, final int position) {
        final Sub_Category_list SubCategoryList = data[position];

        holder.subCatName.setText(SubCategoryList.getSubCategoryName());
        Glide.with(holder.subCatNameimage.getContext())
                .applyDefaultRequestOptions(new RequestOptions()
                        .placeholder(R.drawable.product_loading)
                        .error(R.drawable.product_loading_failed))
                .load(Constant.MAINImagUrl + SubCategoryList.getSubCategoryLogo().substring(2))
                .into(holder.subCatNameimage);


    }

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

    public static class CategoryViewHolder extends RecyclerView.ViewHolder {
        ImageView subCatNameimage;
        TextView subCatName;


        public CategoryViewHolder(@NonNull View itemView) {
            super(itemView);
            subCatName = (TextView) itemView.findViewById(R.id.subCatName);
            subCatNameimage = (ImageView) itemView.findViewById(R.id.subCatNameimage);


        }
    }


}

Please Correct Me Where is doing Mistake请纠正我在哪里做错了

Thanks In Advance提前致谢

You can achieve that requirement by using an expandable recycler view.您可以通过使用可扩展的回收器视图来实现该要求。 There are a lot of libraries you can use to achieve this.您可以使用很多库来实现此目的。 You can use this library .你可以使用这个

Or follow this post to achieve this on your own, you might need to make some changes to get the output as per your requirement.或者按照这篇文章自行实现,您可能需要进行一些更改才能根据您的要求获取 output。

I'am achieve My requirement by using an expandable recycler view我通过使用可扩展的回收器视图来实现我的要求

HERE 这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从子 RecyclerView 更新父 RecyclerView 中的值 - Updating Values in Parent RecyclerView from a Child RecyclerView 父级RecyclerView单击事件的子级RecyclerView项 - Items of Child RecyclerView of parent RecyclerView click event 如何在父级RecyclerView中使用ListView / RecyclerView? - How to have a ListView/RecyclerView inside a parent RecyclerView? RecyclerView中的RecyclerView parent.notifyDataSetChanged子RecyclerView的松散位置 - RecyclerView in RecyclerView parent.notifyDataSetChanged loose position of child RecyclerView recyclerview 内部的 RecyclerView 仅显示父 recyclerview 的最后一项 - RecyclerView inside recyclerview shows only last items of parent recyclerview Recyclerview内的Recyclerview,获取父适配器内子行的点击位置 - Recyclerview inside Recyclerview , get click position of child row inside parent Adapter 子 recyclerView 显示所有父 recyclerView 的相同项目(使用 Firebase 实时数据库) - Child recyclerView showing same items for all parent recyclerView (using Firebase Realtime Database) 如何从其子 recyclerview 视图中获取父 recyclerview 的引用? - How to get reference of the parent recyclerview from its child recyclerview views? Android:处理子回收器视图垂直滚动并在父回收器视图中单击 header - Android : Handling child recyclerview vertical scroll and click in parent recyclerview header 父级LinearLayout onclick,未从子级recyclerview中调用 - Parent LinearLayout onclick, not called from child recyclerview
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM