2

I am working on a functionality in which I have added FooterView to my RecyclerView. I am adding a new item in the list by clicking on "+" icon in FooterView. The item successfully added in the ArrayList from fragment and data has been added to local database but a new list item have not added in the list as adapter is not able to update at same time. When I go to another screen then come back to this screen then I am able to see the item. I tried to do but not able to do so.

Code for Adapter : `public class RecyclerViewAdapter extends RecyclerView.Adapter {

private static final int TYPE_HEADER = 0;
private static final int TYPE_FOOTER = 1;
private static final int TYPE_ITEM = 2;


private Activity activity;

ArrayList<ModelUnrecognisedCode> modelUnrecognisedCodesArrayList;
FinalizePreOrde finalizePreOrderFragment;
ModelUnrecognisedCode modelUnrecognisedCode;

public RecyclerViewAdapter(Activity activity, ArrayList<ModelUnrecognisedCode> modelUnrecognisedCodesArrayList, FinalizePreOrde finalizePreOrderFragment) {
    this.activity = activity;
    this.modelUnrecognisedCodesArrayList = modelUnrecognisedCodesArrayList;
    this.finalizePreOrderFragment = finalizePreOrderFragment;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == TYPE_ITEM) {
        //Inflating recycle view item layout
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list_unrecognised_item, parent, false);
        return new ItemViewHolder(itemView);
    } else if (viewType == TYPE_FOOTER) {
        //Inflating footer view
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_view, parent, false);
        return new FooterViewHolder(itemView);
    } else return null;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {


    if (holder instanceof FooterViewHolder) {
        final FooterViewHolder footerHolder = (FooterViewHolder) holder;

        footerHolder.imgAddMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                finalizePreOrderFragment.addView(footerHolder.etCode.getText().toString(), position);

            }
        });


    } else if (holder instanceof ItemViewHolder) {
        final ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
        modelUnrecognisedCode = modelUnrecognisedCodesArrayList.get(position);
        itemViewHolder.etCode.setText(modelUnrecognisedCode.getUnrecognised_code());


    }
}

@Override
public int getItemViewType(int position) {
    if (position == modelUnrecognisedCodesArrayList.size()) {
        return TYPE_FOOTER;
    }
    return TYPE_ITEM;
}

@Override
public int getItemCount() {
    return modelUnrecognisedCodesArrayList.size() + 1;
}

`

in BindView Holder inside footer section I have added code to click on "+" icon and add new item in the list

footerHolder.imgAddMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                finalizePreOrderFragment.addView(footerHolder.etCode.getText().toString(), position);

            }
        });

And now my Fragment code to add new

 public void addView(String code, int position) {
    ModelUnrecognisedCode modelUnrecognisedCode = new ModelUnrecognisedCode();
    modelUnrecognisedCode.setUnrecognised_code(code);
    modelUnrecognisedCode.setUnrecognised_comment("comment");
    modelUnrecognisedCode.setShop_id("1");
    modelUnrecognisedCode.setShop_name_fr("fr");
    modelUnrecognisedCode.setShop_name_nl("nl");
    databaseHelper.addUnrecognisedCode(modelUnrecognisedCode);
    modelUnrecognisedCodesArrayList = databaseHelper.getUnrecognisedCode();

    adapterUnrecognisedCode.notifyItemInserted(position);
    adapterUnrecognisedCode.notifyItemRangeChanged(position, modelUnrecognisedCodesArrayList.size());
    adapterUnrecognisedCode.notifyDataSetChanged();

    Log.e("TAG", "unrecognised code: " + modelUnrecognisedCodesArrayList.size());
}

I am able to add the item in the ArrayList but adapter not updated when I press back and then come back again then I am able to see the item. Please help

mishti
  • 183
  • 7
  • 20

3 Answers3

2

Try to clear your list, add all items again and then notify the change. Something like this:

list.clear()
list.addAll(yourUpdatedList)
adapter.notifyDataSetChanged()
Nil Oleart
  • 324
  • 3
  • 14
0

Did you try: RecyclerView.adapter.notifyDataSetChanged() It worked for me, that updates your RecyclerView directly

AskNilesh
  • 67,701
  • 16
  • 123
  • 163
Tobias D
  • 87
  • 1
  • 2
  • 13
  • you write instead of 'RecyclerView' your RecyclerView Name and playe the code where your View should be changed – Tobias D Sep 12 '18 at 13:21
  • Not Wokring. I have added adapterUnrecognisedCode.notifyDataSetChanged(); in the code – mishti Sep 14 '18 at 07:28
0

If i am getting your question you are not adding the new item in list Add the new added item into list and then notifychanged

modelUnrecognisedCodesArrayList .add(modelUnrecognisedCode);

 public void addView(String code, int position) {
        ModelUnrecognisedCode modelUnrecognisedCode = new ModelUnrecognisedCode();
        modelUnrecognisedCode.setUnrecognised_code(code);
        modelUnrecognisedCode.setUnrecognised_comment("comment");
        modelUnrecognisedCode.setShop_id("1");
        modelUnrecognisedCode.setShop_name_fr("fr");
        modelUnrecognisedCode.setShop_name_nl("nl");
        databaseHelper.addUnrecognisedCode(modelUnrecognisedCode);
        modelUnrecognisedCodesArrayList = databaseHelper.getUnrecognisedCode();

      modelUnrecognisedCodesArrayList .add(modelUnrecognisedCode);

      adapterUnrecognisedCode.notifyItemInserted(position);
        adapterUnrecognisedCode.notifyItemRangeChanged(position, 
     modelUnrecognisedCodesArrayList.size());
        adapterUnrecognisedCode.notifyDataSetChanged();

        Log.e("TAG", "unrecognised code: " + modelUnrecognisedCodesArrayList.size());
    }
Bunny
  • 1,044
  • 12
  • 23