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.