在ArrayList的ArrayList上操作以格式化数据并在recyclerview中显示

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

这是对数据进行排序和显示的高级数据操作。我有一个对象的数组列表,可以说

 ArrayList<PersonDetails> personList= new ArrayList<>();
personList.add(name:"George",date:"25-DEC-2019",duration:"30mins",time:"9:45",slot:"Morning",exercise-type:"Leg-Exercise");
personList.add(name:"Ramesh",date:"25-DEC-2019",duration:"30mins",slot:"9:45","Morning",exercise-type:"Leg-Exercise");
personList.add(name:"Joslin",date:"25-DEC-2019",duration:"30mins",slot:"9:45","Morning",exercise-type:"Arms-Exercise");
personList.add(name:"Hrithik",date:"25-DEC-2019",duration:"30mins",slot:"9:45","Morning",exercise-type:"Arms-Exercise");

所有数据类型都是string.so,因此我必须在此列表上进行操作,并在recyclerview上显示最终结果。我想将具有相同锻炼类型并且在一个对象中有个体的人归为一组。我也想算一下具有相同运动类型的人。

Details
-----------------------------------------------------
Exercise-type               Leg-exercise
Person                  2
-----------------------------------------------------
George                  
Date                    25-Dec-2019
Duration                30mins
Time                    9:45
Slot                    Morning

Ramesh
Date                    25-Dec-2019
Duration                30mins
Time                    9:45
Slot                    Morning

Details
-----------------------------------------------------
Exercise-type               Arms-exercise
Person                  2
-----------------------------------------------------
Joslin                  
Date                    25-Dec-2019
Duration                30mins
Time                    9:45
Slot                    Morning

Hrithik                     
Date                    25-Dec-2019
Duration                30mins
Time                    9:45
Slot                    Morning

这是我的item_detail_order.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/fieldItems"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:layout_marginBottom="16dp"

    >

    <TextView
        android:id="@+id/detail_item_key"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:fontFamily="@font/montserrat_medium_0"
        android:text="detail_items"
        android:textColor="@color/colorBody">

    </TextView>

    <TextView
        android:id="@+id/detail_item_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="8dp"
        android:fontFamily="@font/montserrat_semibold_0"
        android:text="detail_values">

    </TextView>

</RelativeLayout>

这里id-detail_item_key例如是名称或持续时间,或广告位等。id-detail_item_value例如是名称,持续时间和广告位中的对应值。

DetailObjectAdapter.java

public class DetailsObjectAdapter extends RecyclerView.Adapter<DetailsObjectAdapter.DetailsObjectViewHolder> {


    ArrayList<DetailsObject> detailsObjectList = new ArrayList<>();

    public DetailsObjectAdapter(ArrayList<DetailsObject> detailsList) {
        detailsObjectList = detailsList;
    }

    @NonNull
    @Override
    public DetailsObjectViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.item_details_summary, parent, false);

        return new DetailsObjectViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull DetailsObjectViewHolder holder, int position) {

        DetailsObject detailsObject = detailsObjectList.get(position);
        holder.detailsItemKey.setText(detailsObject.getNamekey());
        holder.detailsItemValue.setText(detailsObject.getNameValue());


    }

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

    public class DetailsObjectViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.detail_item_key)
        TextView detailsItemKey;

        @BindView(R.id.detail_item_value)
        TextView detailsItemValue;

        public DetailsObjectViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }
}

我曾尝试将练习类型与哈希表进行分组,但这将导致一个全新的字符串。然后我必须逐行操作它。我一般不喜欢。我真的不希望大家为我编写整个代码。只是一种告诉我确切方法的方法?像伪代码一样?

android xml android-recyclerview recycler-adapter
2个回答
1
投票

制作新的HashMap < String, ArrayList < Details Object > >。将类型的对象列表隔离到List中,然后使用关键的Exercise type将其添加到此HashMap中。当您必须在recyclerview中显示此数据时,可以使两个视图持有者一个显示“锻炼”标题和人数,而另一个将显示人员的细节。

按照these之类的示例生成一个列表,该列表将传递到您的回收者视图适配器。


0
投票

您必须先添加两项检查,然后再进行日期检查。创建两个单独的列表,一个用于练习,第二个用于数据。

ArrayList<String> exerciseType=new ArrayList()

ArrayList<String> dateList=new ArrayList()

现在将所有练习添加到arrrayList中,但要添加contains检查以避免重复的日期相同。现在使用循环并为每个练习创建一个单独的数组,并将其保存到HashMap<String,ArrayList<DetailModel>> exerciseArrays=new HashMap()

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