Я пытаюсь динамически обновить c для фрагмента, получающего список данных из RoomDatabase.
На этой странице пользователь может удалить запись, и я понятия не имею, как динамически обновлять эту страницу всякий раз, когда пользователь удаление записи.
Я нашел один способ сделать это, но я не мог понять структуру кода в ссылке ниже.
{ ссылка }
Ваш совет будет по достоинству оценен!
public class FragmentStateLibraryPagerSupport extends Fragment {
MyAdapter myAdapter;
ViewPager mPager;
public List<String> head_array;
public List<String> desc_array;
TodoDatabase db;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View root = inflater.inflate( R.layout.fragment_pager, null );
return root;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated( view, savedInstanceState );
db = Room.databaseBuilder( getContext(), TodoDatabase.class, "todo-db" ).allowMainThreadQueries().build();
head_array = db.todoDao().getAllhead();
desc_array = db.todoDao().getAllDesc();
myAdapter = new MyAdapter( getChildFragmentManager() );
mPager = (ViewPager) view.findViewById( R.id.pager );
mPager.setAdapter( myAdapter );
}
private class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super( fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT );
}
@NonNull
@Override
public Fragment getItem(int position) {
return ArrayListFragment.newInstance( position, head_array, desc_array );
}
@Override
public int getCount() {
if (head_array.size() == 0) {
return 1;
} else {
return head_array.size();
}
}
}
public static class ArrayListFragment extends ListFragment {
int mNum;
ArrayList<String> head_array, desc_array;
Button btn_save;
static ArrayListFragment newInstance(int num, List<String> head_array, List<String> desc_array) {
ArrayListFragment arrayListFragment = new ArrayListFragment();
Bundle bundle = new Bundle();
bundle.putInt( "num", num );
bundle.putStringArrayList( "head_array", (ArrayList<String>) head_array );
bundle.putStringArrayList( "desc_array", (ArrayList<String>) desc_array );
arrayListFragment.setArguments( bundle );
return arrayListFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
mNum = getArguments() != null ? getArguments().getInt( "num" ) : 1;
head_array = getArguments().getStringArrayList( "head_array" );
desc_array = getArguments().getStringArrayList( "desc_array" );
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate( R.layout.fragment_pager_list, container, false );
btn_save = v.findViewById( R.id.btn_save );
final View head_TextView = v.findViewById( R.id.head_textView );
final View desc_TextView= v.findViewById( R.id.desc_textView);
if (head_array.size() == 0) {
((TextView) head_TextView).setText( R.string.when_no_sentence_in_DB );
((TextView) desc_TextView).setText( "" );
btn_save.setVisibility( View.INVISIBLE );
} else {
((TextView) kor_tv).setText( head_array.get( mNum ) );
((TextView) eng_tv).setText( getString( Integer.parseInt( desc_array.get( mNum ) ) ) );
btn_save.setText( "Delete Sentence" );
btn_save.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
TodoDatabase db = Room.databaseBuilder( getContext(), TodoDatabase.class, "todo-db" ).allowMainThreadQueries().build();
db.todoDao().deleteRecord( ((TextView) head_TextView).getText().toString() );
update();
}
} );
}
return v;
}
}
}