Я пытаюсь создать форму, у которой есть 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());*/
}
}
}
}