首页 > 解决方案 > 有效载荷显示正确的数据,但 dors 不更新 arraylist

问题描述

因此,我在 recyclerview 中有三个项目,我想检查其中一个字段是否是唯一的,或者在我的情况下它是名称。所有字段都正确显示在屏幕上,但每当我调用 checkValidation 时,即使两个名称不同,它也总是返回 false。我有一个列表,每当我从活动中调用它时,它会显示一些不同的值,而不是它在屏幕上的显示方式。如果有什么不明白的欢迎评论。

亲爱的社区,我在这里真的需要帮助.. 让我知道您真正没有得到的部分..:/ MainActivity.java

    public MainActivity extends AppCompatActivity implements someinterface
..
..
@OnClick(R.id.activity_detailed_proceed)
    void goToOrderPage() {


        if (checkValidation()) {

            startActivity(new Intent(MainActivity.this, Destination.class));
        } else {

            SameNameAlertDialogFragment sameNameAlertDialogFragment = new SameNameAlertDialogFragment();
            sameNameAlertDialogFragment.show(getSupportFragmentManager(), "ERROR DIALOG");

        }


    }

..
..
 boolean checkValidation() {


//        
        ArrayList<PersonFriends> personList = personAdapter.getPersonList();

        ArrayList<String> namesList = new ArrayList<>();
        for (int i = 0; i < personList.size(); i++) {
            namesList.add(personList.get(i).getName());
            System.out.println(personList.get(i).getName());

        }

        boolean corrent = true;



        Set<String> set = new HashSet<String>(namesList);


        if (set.size() < namesList.size()) {
            //duplicates found

            Log.d(TAG, "False was called here");
            return false;
        }


        return true;
    }

 PersonAdapter personAdapter;



@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detailed_selected_therapy);
        ButterKnife.bind(this);




        ArrayList<PersonFriends> personList = new ArrayList<>();
        personAdapter = new PersonAdapter(this, this);



        personRecyclerview.setAdapter(personAdapter);
        personRecyclerview.setNestedScrollingEnabled(false);
        personRecyclerview.setLayoutManager(new LinearLayoutManager(this));

    }





some interface setup to get the name and duration

@Override
    public void onPersonDetailClicked(int position, View view) {


        if (view.getId() == R.id.person_name) {

            adapterPosition = position;
            EnterPersonDialogFragment enterPersonDialogFragment = new EnterPersonDialogFragment();
            enterPersonDialogFragment.show(getSupportFragmentManager(), "PERSONS SELECTED");

        }

        if (view.getId() == R.id.delete_person) {

            personAdapter.removeItem(position);
//            personAdapter.setPersonList(personList);
//            personAdapter.notifyItemRemoved(position);
        }


        if (view.getId() == R.id.person_duration) {
            adapterPosition = position;
            DurationDialogFragment durationDialogFragment = new DurationDialogFragment();
            durationDialogFragment.show(getSupportFragmentManager(), "DURATION SELECTED");
        }


    }


 @Override
    public void enteredInName(String name) {



        //change the list that is inside the adapter.
        personAdapter.getPersonList().get(adapterPosition).setName(name);
        personAdapter.notifyItemChanged(adapterPosition, PersonAdapter.PAYLOAD_NAME);

    }

    @Override
    public void durationSelectedIs(String duration) {

        personAdapter.getPersonList().get(adapterPosition).setduration(duration);
        personAdapter.notifyItemChanged(adapterPosition, PersonAdapter.PAYLOAD_DURATION);
    }

PersonAdapter.java

public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> {


    public static final String PAYLOAD_NAME = "PAYLOAD_NAME";
    public static final String PAYLOAD_DURATION = "PAYLOAD_DURATION";
    public static final String PAYLOAD_DATE = "PAYLOAD_DATE";


    public static final String TAG = PersonAdapter.class.getSimpleName();
    Context context;
    ArrayList<PersonFriends> personList;
    onPersonItemClicked onPersonItemClicked;

    public PersonAdapter(Context context, onPersonItemClicked personItemClickListener) {

        this.context = context;
        onPersonItemClicked = personItemClickListener;
    }

    public void setPersonList(ArrayList<PersonFriends> personList) {

        this.personList = personList;
        notifyDataSetChanged();
    }


    public ArrayList<PersonFriends> getPersonList() {

        return this.personList;
    }


    public void removeItem(int position) {

        personList.remove(position);
        notifyItemRemoved(position);

    }

    @NonNull
    @Override
    public PersonAdapter.PersonViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

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

        return new PersonViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull PersonAdapter.PersonViewHolder holder, int position) {

        PersonFriends Person = personList.get(position);
        holder.personName.setText(Person.getName());
        holder.personDate.setText(Person.getDate());
        holder.personDuration.setText(Person.getduration());

        if (position == 0) {
            holder.deleteFab.hide();
        }

    }

    @Override
    public void onBindViewHolder(@NonNull PersonViewHolder holder, int position, @NonNull List<Object> payloads) {

        if (!payloads.isEmpty()) {
            final PersonFriends item = personList.get(position);


            for (final Object payload : payloads) {


                if (payload.equals(PAYLOAD_NAME)) {
                    // in this case only name will be updated
                    holder.personName.setText(item.getName());
                } else if (payload.equals(PAYLOAD_DURATION)) {
                    // only age will be updated
                    holder.personDuration.setText(item.getduration());
                } else if (payload.equals(PAYLOAD_DATE)) {

                    holder.personDate.setText(item.getDate());
                }
            }

        } else {
            // in this case regular onBindViewHolder will be called
            super.onBindViewHolder(holder, position, payloads);
        }


    }

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

    public interface onPersonItemClicked {
        void onPersonDetailClicked(int position, View view);
    }

    class PersonViewHolder extends RecyclerView.ViewHolder {
        private final View.OnClickListener onClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                onPersonItemClicked.onPersonDetailClicked(getAdapterPosition(), view);

            }
        };

        @BindView(R.id.person_name)
        TextView personName;
        @BindView(R.id.person_date)
        TextView personDate;
        @BindView(R.id.person_duration)
        TextView personDuration;
        @BindView(R.id.delete_person)
        FloatingActionButton deleteFab;

        public PersonViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
            personName.setOnClickListener(onClickListener);
            personDate.setOnClickListener(onClickListener);
            personDuration.setOnClickListener(onClickListener);
            deleteFab.setOnClickListener(onClickListener);


        }
    }
}

item_persons_details.xml

<HorizontalScrollView 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="wrap_content"
    android:layout_gravity="center|top"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:orientation="vertical"
    android:scrollbars="none">


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

        <TextView
            android:id="@+id/person_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="24dp"
            android:background="@drawable/bg_rounded_30"
            android:padding="8dp"

            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            android:text="NAME">

        </TextView>

        <TextView
            android:id="@+id/person_duration"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:layout_margin="4dp"
            android:background="@drawable/bg_rounded_30"
            android:drawableEnd="@drawable/ic_bottom_arrow"
            android:drawablePadding="5dp"
            android:padding="8dp"
            android:text="DURATION">

        </TextView>

        <TextView
            android:id="@+id/person_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:background="@drawable/bg_rounded_30"
            android:drawableEnd="@drawable/ic_bottom_arrow"
            android:drawablePadding="4dp"
            android:padding="8dp"
            android:text="MYDATE">

        </TextView>


        <com.google.android.material.floatingactionbutton.FloatingActionButton

            android:id="@+id/delete_person"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|center"
            android:layout_margin="4dp"
            android:backgroundTint="@color/colorBackground"
            android:foregroundGravity="right"
            android:outlineSpotShadowColor="@color/white"
            android:src="@drawable/ic_bin"
            android:tint="@color/colorBlack"
            app:backgroundTint="@color/white"
            app:fabCustomSize="30dp"

            app:layout_constraintBottom_toBottomOf="@id/material_card_layout"
            app:layout_constraintStart_toStartOf="@id/material_card_layout"
            app:layout_constraintTop_toBottomOf="@id/material_card_layout"
            app:maxImageSize="20dp" />


    </LinearLayout>

</HorizontalScrollView>

标签: javaandroidarraylistandroid-recyclerview

解决方案


推荐阅读