简体   繁体   中英

Ho to update view holder text view value in adapter according to the adapter callback listner?

I have a recycle view adapter and it contains one text view, adapter getting a callback value from one of dialog fragment .I want to setText the holder's textview when getting callback value.In returnData method i am getting callback value, now I want to set that value in my holder text view named text value.

 public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener,MyDialogFragment.OnSetChangeListenerDialog{
     @Override
      public void returnData(String result) {
    setValue = result;
      }

       }

public MyAdapter(Activity activity, List<Detail> list, FragmentManager fragmentManager) {

    this.activity = activity;
    this.list = list;
    this.fragmentManager = fragmentManager;

}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);
    View view = inflater.inflate(R.layout.item, parent, false);

    final ListItemViewHolder viewHolder = new ListItemViewHolder(view);

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position = viewHolder.getAdapterPosition();
        }
    });

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

    try {

        final ListItemViewHolder viewHolder = (ListItemViewHolder) holder;

        fina Detail item = list.get(position);
           viewHolder.textvalueTwo .setText(item.DESC());
        }


@Override
public void returnData(String result) {
    setValue = result;
}


   public class ListItemViewHolder extends RecyclerView.ViewHolder {
     private TextView textvalue;
        public ListItemViewHolder(final View parent) {
        super(parent);
          textvalue = (EditText) parent.findViewById(R.id.textvalue);
            textvalueTwo = (TextView) parent.findViewById(R.id.textvalueTwo);

            }
}}

Did you try using list.set (index,model)

 //Updating a particular item
public void updateItem(int index, YourModelClass item) {
    mList.set(index, item);
    notifyItemChanged(index);
}

This will update only the particular data of the RecyclerView Try it do let me know

Update

In your returnData() add the below code

Detail item = list.get(getAdapterPosition());
item .setDescription(result);// updating the description value

updateItem(getAdapterPosition(), item); // calling the method to notify the change

Here you go. Method onBindViewHolder() will be called when you notify that data set changed.

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    // update your callback value here
    if(!TextUtils.isEmpty(setValue)) {
        viewHolder.textvalue.setText(setValue);
    }
}

and in your returnData():

@Override
public void returnData(String result) {
    setValue = result;
    notifyDataSetChanged();
    // If you know exactly position of item changed
    // use  notifyItemChanged(position of item changed);
}

This should work

@Override
public void returnData(String result) {
    setValue = result;
    Detail item = list.get(position);
    item.DESC = setValue;
    mList.set(position, item);
    notifyItemChanged(position);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM