Не удается добавить новое поле адреса в RecyclerView Когда нажата кнопка «Добавить дополнительный адрес»? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать форму, у которой есть recyclerView для адреса, а над RecyclerView есть кнопка, которая onClick может добавить дополнительные поля адреса внутри этого RecyclerView, но не может сделать это вместо этого, когда кнопка нажата, приложение перестало работать , Вот вывод журнала, который я получил

Процесс: com.fitness.client, PID: 10162 1

java .lang.NullPointerException: попытка вызовите виртуальный метод 'boolean androidx.recyclerview.widget.RecyclerView $ ViewHolder.shouldIgnore ()' для ссылки на пустой объект в androidx.recyclerview.widget.RecyclerView $ LayoutManager.removeAndRecycleAllViews (RecyclerView. java 100): 100 .recyclerview.widget. 1019 *: 1156) на com.fitness.client.ui.main.fragments.listing.ListingFragment $ 1.onClick (ListingFragment. java: 144) на android .view.View.performClick (Просмотреть. java: 6608) в android .view.View.performClickInternal (View. java: 6585) в android .view.View.access $ 3100 (View. java: 785) в android .view.View $ PerformClick.run (просмотр. java: 25921) в android .os.Han dler.handleCallback (Handler. java: 873) в android .os.Handler.dispatchMessage (Handler. java: 99) в android .os.Looper.l oop (Looper. java : 201)

А вот код моего фрагмента

И, кстати, КНОПКА называется "адрес"

package com.fitness.client.ui.main.fragments.listing;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;

import androidx.annotation.NonNull;

import com.fitness.client.BR;
import com.fitness.client.R;
import com.fitness.client.api.RetroFitFactory;
import com.fitness.client.api.product.ProductDetailResponse;
import com.fitness.client.api.user.UserProfileResponse;
import com.fitness.client.api.user.UserService;
import com.fitness.client.base.classes.BaseFragment;
import com.fitness.client.base.classes.BaseRecyclerViewAdapter;
import com.fitness.client.base.classes.BaseViewHolder;
import com.fitness.client.databinding.ItemOfferingBinding;
import com.fitness.client.databinding.ItemProductListingBinding;
import com.fitness.client.objects.Product;
import com.fitness.client.ui.main.fragments.listing.adapter.AddressAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.DescriptionAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.EmailAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.FacilitesAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.PhoneAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.TagAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.TermsAdapter;
import com.fitness.client.ui.main.fragments.listing.adapter.TimingAdapter;
import com.fitness.client.ui.offering.OfferingActivity;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

public class ListingFragment extends BaseFragment<ItemProductListingBinding, ListingViewModel, ListingNavigator> implements ListingNavigator {

    public String TAG = "ListingFragment";
    private AddressAdapter addressAdapter;
    private EmailAdapter emailAdapter;
    private FacilitesAdapter facilitesAdapter;
    private PhoneAdapter phoneAdapter;
    private DescriptionAdapter descriptionAdapter;
    private TermsAdapter termsAdapter;
    private TagAdapter tagAdapter;
    private TimingAdapter timingAdapter;

    private OfferingAdapter offeringAdapter;
    private LinearLayout addressLayout;
    private LinearLayout.LayoutParams layoutParams;

    private int ids = 0;
    private int hint = 0;

    public static ListingFragment getInstance(Context context) {
        return (ListingFragment) ListingFragment.instantiate(context, ListingFragment.class.getName());
    }


    @Override
    public int getBindingVariable() {
        return BR.listing_view_model;

    }

    @Override
    public int getLayoutId() {
        return R.layout.item_product_listing;
    }

    @Override
    public void init(View view, Bundle savedInstances) {
        addressAdapter = new AddressAdapter(new ArrayList<>());
        emailAdapter = new EmailAdapter(new ArrayList<>());
        facilitesAdapter = new FacilitesAdapter(new ArrayList<>());
        phoneAdapter = new PhoneAdapter(new ArrayList<>());
        descriptionAdapter = new DescriptionAdapter(new ArrayList<>());
        termsAdapter = new TermsAdapter(new ArrayList<>());
        tagAdapter = new TagAdapter(new ArrayList<>());
        timingAdapter = new TimingAdapter(new ArrayList<>());

        offeringAdapter = new OfferingAdapter(new ArrayList<>());


        getViewDataBinding().addressList.setAdapter(addressAdapter);
        getViewDataBinding().emailList.setAdapter(emailAdapter);
        getViewDataBinding().facilitiesList.setAdapter(facilitesAdapter);
        getViewDataBinding().phoneList.setAdapter(phoneAdapter);
        getViewDataBinding().descriptionList.setAdapter(descriptionAdapter);
        getViewDataBinding().termsAndConditionsList.setAdapter(termsAdapter);
        getViewDataBinding().tagList.setAdapter(tagAdapter);
        getViewDataBinding().timingList.setAdapter(timingAdapter);
        getViewDataBinding().offeringList.setAdapter(offeringAdapter);


        getViewModel().requestData();

//        LayoutInflater inflater = (LayoutInflater)
//                Objects.requireNonNull(getContext()).getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        LayoutInflater inflater = LayoutInflater.from(getContext());
       View view1 = inflater != null ? inflater.inflate(R.layout.item_edit_box, null) : null;


//        addressLayout =getViewDataBinding().layoutmain;
        if (view != null) {
            addressLayout = view1 != null ? view1.findViewById(R.id.createLayout) : null;
        }
        Log.e("Listing Fragment", String.format("Recyler View LAYOUT %s", addressLayout));
//        addressLayout = view.findViewById(R.id.createLayout);
        layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutParams.setMargins(5, 5, 5, 5);
        final int[] i = {0};
        getViewDataBinding().address.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                i[0] = i[0] + 1;
//                TextView more = new TextView(getContext());
//                more.setText(String.format("Address %s", i[0]));
//                more.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
//                more.setVisibility(View.VISIBLE);
                ids++;
                hint++;
                EditText newEdit = new EditText(getContext());
                newEdit.setHint(String.format("Address %s", hint));
                newEdit.setId(ids);
                newEdit.setMinLines(4);

                Log.e("New Edittext: ", String.valueOf(ids));
                newEdit.setInputType(InputType.TYPE_CLASS_TEXT);
//                addressLayout.addView(more);
                addressLayout.addView(newEdit,layoutParams);
                getViewDataBinding().addressList.addView(addressLayout);
                AddressAdapter addressAdapter1 = new AddressAdapter(new ArrayList<>());
//                getViewDataBinding().addressList.addView(addressLayout);
                getViewDataBinding().addressList.setAdapter(addressAdapter1);
                addressAdapter1.notifyDataSetChanged();
//                 getViewDataBinding().moreAddress.setAdapter(addressAdapter);
//               addressAdapter.notifyDataSetChanged();


//                ListingFragment fragment = (ListingFragment) getFragmentManager().findFragmentByTag(TAG);
//                if (fragment != null) {
//                    fragment.addressAdapter.getAdapter().newAddeddata();
//                }

                //                getViewDataBinding().
//                getViewDataBinding().moreAddress.setAdapter(addressAdapter);
//                addressAdapter.notifyDataSetChanged();
//                RecyclerView recyclerView = new RecyclerView(getContext());
//               recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
//               recyclerView.setHasFixedSize(true);
//               recyclerView.setAdapter(addressAdapter);

            }
        });


    }

    @Override
    public void updateProductList(List<Product> products) {

        if (products != null && products.size() > 0) {
            for (Product product : products) {
                getViewModel().requestProductDetails(product.getId());
            }

        } else {
            showToast("No products found");
        }

    }

    @Override
    public void setUpProductDetails(ProductDetailResponse data) {

        offeringAdapter.addData(data.getData().getOffer_package());


    }

    @Override
    public void setProfileInformation(UserProfileResponse body) {
        getViewDataBinding().name.setText(body.getData().getName());
        timingAdapter.addData(body.getData().getTiming_info());
        termsAdapter.addData(Collections.singletonList(body.getData().getMerchant_info().getTermscondition()));

        Log.e("Listing Fragment", "Terms: " + Collections.singletonList(body.getData().getMerchant_info().getTermscondition()));

        tagAdapter.addData(Collections.singletonList(body.getData().getMerchant_info().getBusiness_tags()));
        descriptionAdapter.addData(Collections.singletonList(body.getData().getMerchant_info().getDescription()));
        addressAdapter.addData(body.getData().getAddress());
        if (body.getData().getFacilities_info().getFacilities() != null)
            facilitesAdapter.addData(Arrays.asList(body.getData().getFacilities_info().getFacilities().split(",")));
        List<String> emailList = Arrays.asList(body.getData().getContact_info().getAlter_email_1(),
                body.getData().getContact_info().getAlter_email_2(),
                body.getData().getContact_info().getAlter_email_3(),
                body.getData().getContact_info().getAlter_email_4());
//        emailAdapter.addData(emailList);
        emailAdapter.addData(emailList);
        Log.e("Listing Fragment", "Email: " + emailList);


//        phoneAdapter.addData(body.getData().getContact_info());

        List<String> phoneList = Arrays.asList(body.getData().getContact_info().getAlter_mobile_1(),
                body.getData().getContact_info().getAlter_mobile_2(),
                body.getData().getContact_info().getAlter_mobile_3(),
                body.getData().getContact_info().getAlter_mobile_4());
        Log.e("Listing Fragment", "Phone Number: " + phoneList);
        phoneAdapter.addData(phoneList);
//        phoneAdapter.addData(Arrays.asList(body.getData().getContact_info().getAlter_mobile_1(),
//                );


        getViewDataBinding().update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showLoading("Loading", "Please wait while update your profile");

                RetroFitFactory.getRetrofitCallFor(UserService.class)
                        .updateUserProfile();

            }
        });
    }


    class OfferingAdapter extends BaseRecyclerViewAdapter<OfferingAdapter.OfferingHolder, ProductDetailResponse.Offer_packageEntity> {

        public OfferingAdapter(List<ProductDetailResponse.Offer_packageEntity> data) {
            super(data);
        }

        @NonNull
        @Override
        public OfferingHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new OfferingHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_offering, parent, false));
        }

        class OfferingHolder extends BaseViewHolder<ProductDetailResponse.Offer_packageEntity, ItemOfferingBinding> {


            public OfferingHolder(View itemView) {
                super(itemView);

            }

            @Override
            protected void bindObject(ProductDetailResponse.Offer_packageEntity object) {
                getViewDataBinding().setOffering(object);

                getViewDataBinding().viewSch.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(getContext(), OfferingActivity.class);
                        intent.putParcelableArrayListExtra("data", object.getDays_timing());
                        startActivity(intent);
                    }
                });
              /*   adapter.clear();
                ProductDetailResponse.Days_timingEntity placeHolder = new ProductDetailResponse.Days_timingEntity();
                placeHolder.setDay("Day");
                placeHolder.setWeek("Week");
                adapter.addData(Collections.singletonList(placeHolder));
                adapter.addData(object.getDays_timing());*/


            }
        }
    }


}

1 Ответ

0 голосов
/ 01 апреля 2020

Создание функций в вашем адаптере с именами addItem и removeItem

. Посмотрите это видео для более подробного объяснения: https://www.youtube.com/watch?v=enTvZm9LOGc&t=247s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...