Reputation: 576
I'm calling notifyDataSetChanged
method on my adapter after a db change, but this method not updating the view.
myclass fragment on tap on cardview open a external activity i use the interface for receive the event onActivityResult (this fire correctly)
public interface StartActivityForResultInterface {
public void myStartActivityForResult(Intent intent, int requestCode);
}
myclass fragment
public class ContentFragment extends Fragment implements StartActivityForResultInterface {
private PaffVocaliAdapter m_adapter;
@Override
public void myStartActivityForResult(Intent intent, int requestCode) {
// do pre-processing here if you need to
startActivityForResult(intent, requestCode);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.content_fragment,container,false);
dbmanPaffVocali loc_dbmanPafflocali = new dbmanPaffVocali((getActivity()));
List<PaffVocali> items = loc_dbmanPafflocali.lista();
if (items.size() == 0)
{
for (int i = 0; i < 10; i++) {
PaffVocali p = new PaffVocali();
p.setTitolo("Tab #" + " item #" + i);
items.add(p);
}
}
m_adapter = new PaffVocaliAdapter(items);
m_adapter.setCallback(this);
RecyclerView recyclerView = (RecyclerView)v.findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(m_adapter);
return v;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
m_adapter.notifyDataSetChanged();
}
}
myadapter class
public class PaffVocaliAdapter extends RecyclerView.Adapter<PaffVocaliAdapter.ViewHolder> {
private List<PaffVocali> mItems;
private StartActivityForResultInterface myInterface;
PaffVocaliAdapter(List<PaffVocali> items) {
mItems = items;
}
public void setCallback (StartActivityForResultInterface myInterface) {
this.myInterface = myInterface;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_listapaff, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
final PaffVocali item = mItems.get(i);
viewHolder.mTextViewTitolo.setText(item.getTitolo());
viewHolder.mTextViewEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Context context = view.getContext();
//context.startActivityForResult(new Intent(context, crud_activity_paff.class));
Intent intent = new Intent(context, crud_activity_paff.class);
intent.putExtra("id",item.getId());
myInterface.myStartActivityForResult(intent, 1);
}
});
}
@Override
public int getItemCount() {
return mItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mTextViewTitolo;
private final TextView mTextViewEdit;
ViewHolder(View v) {
super(v);
mTextViewTitolo = (TextView) v.findViewById(R.id.cardpaff_titolo);
mTextViewEdit = (TextView) v.findViewById(R.id.cardpaff_edit);
}
}
}
I'm sure that the db is changed, the new data is shown when I restart the app.
Upvotes: 3
Views: 5285
Reputation: 46
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
dbmanPaffVocali loc_dbmanPafflocali = new dbmanPaffVocali((getActivity()));
List<PaffVocali> items = loc_dbmanPafflocali.lista();
if (items.size() == 0)
{
for (int i = 0; i < 10; i++) {
PaffVocali p = new PaffVocali();
p.setTitolo("Tab #" + " item #" + i);
items.add(p);
}
}
m_adapter.setMItems(items);//add the method
m_adapter.notifyDataSetChanged();
}
Try
Upvotes: 3
Reputation: 107121
You are calling the notifyDataSetChanged
, but you didn't updated the data in the adapter class, that's the reason why you are not seeing any change in the RecyclerView
. You need to update the data (pass new data to adapter) before calling notifyDataSetChanged
.
Change your onActivityResult
like:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
dbmanPaffVocali loc_dbmanPafflocali = new dbmanPaffVocali((getActivity()));
List<PaffVocali> items = loc_dbmanPafflocali.lista();
if (items.size() == 0)
{
for (int i = 0; i < 10; i++)
{
PaffVocali p = new PaffVocali();
p.setTitolo("Tab #" + " item #" + i);
items.add(p);
}
}
m_adapter.setData(items);
m_adapter.notifyDataSetChanged();
}
And in your adapter class implement a public method for passing the new data:
public void setData(List<PaffVocali> items)
{
mItems = items;
}
Upvotes: 2