Мне жаль вопрос, на который уже дан ответ в этой сети, но я не могу найти тот же случай с моим.
Я вызываю списки из нескольких столбцов с RoomDatabase
для SetText
в ViewPager
, и мой вопрос заключается в том, как динамически обновлять ViewPager
при удалении записи. В других вопросах, которые я проверял, был TextView
в ViewPager
. Но в моем случае я присваиваю массивы, полученные через пакет, каждому TextView
в ArrayListFragment
классе.
Это так расстраивает после поиска того, что делать после 'myAdapter.notifyDataSetChanged ()' в кнопка удаления.
Буду очень признателен за вашу помощь.
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 final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View root = inflater.inflate( R.layout.fragment_pager, null );
Button btn_delete = root.findViewById( R.id.btn_delete );
btn_delete.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
ArrayListFragment arrayListFragment = new ArrayListFragment();
String head_array_text = head_array.get( arrayListFragment.return_mNum() );
Log.e( "head_array_text ::" , head_array.get( arrayListFragment.return_mNum() ));
TodoDatabase db = Room.databaseBuilder( getContext(), TodoDatabase.class, "todo-db" ).allowMainThreadQueries().build();
db.todoDao().deleteRecord( head_array_text );
myAdapter.notifyDataSetChanged();
}
} );
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() {
return head_array.size();
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
}
public static class ArrayListFragment extends ListFragment {
int mNum;
ArrayList<String> head_array, desc_array;
Button btn_save;
public int return_mNum(){
return mNum;
}
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 final LayoutInflater inflater, @Nullable final 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_tv = v.findViewById( R.id.head_tv );
final View desc_tv = v.findViewById( R.id.desc_tv );
if (head_array.size() == 0) {
((TextView) head_tv).setText( R.string.when_no_data_in_DB );
((TextView) desc_tv ).setText( "" );
btn_save.setVisibility( View.INVISIBLE );
} else {
((TextView) head_tv).setText( head_array.get( mNum ) );
((TextView) desc_tv ).setText( getString( Integer.parseInt( desc_array.get( mNum ) ) ) );
}
return v;
}
}
}