Dynami c обновление в FragmentStatePagerAdapter - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь динамически обновить 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;
        }
    } 
}
...