动态更新viewpager

Update viewpager dynamically

我有一个 ViewPager。数据存储在数据库中。我想动态更新它。元素立即消失是必要的,但它不起作用。在我调用 onCreate 方法后更新数据。我尝试了所有建议,但没有帮助。我做错了什么?请帮我找到解决办法。

TextPagerAdapter.java

public class TextPagerAdapter extends FragmentStatePagerAdapter {

List<String> data;

public TextPagerAdapter(FragmentManager fm, List<String> data) {
    super(fm);
    this.data = data;

}

@Override
public Fragment getItem(int i) {

    Fragment fragment = new ItemFragment();

    Bundle args = new Bundle();
    args.putString(ItemFragment.ARG_TEXT, data.get(i));
    args.putInt(ItemFragment.ARG_POSITION, i+1);
    args.putInt(ItemFragment.ARG_COUNT, getCount());

    fragment.setArguments(args);

    return fragment;

}

@Override
public int getCount() {

    return data.size();
}

public String getTextVP(int i) {
    return data.get(i);
}

@Override
public CharSequence getPageTitle(int position) {
    return "Item " + (position + 1);
}


@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}
}

ItemFragment.java

public class ItemFragment extends Fragment {

public static final String ARG_TEXT = "item_text";
public static final String ARG_POSITION = "item_position";
public static final String ARG_COUNT = "item_count";
TextView text1, textCount;

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {

    View rootView = inflater.inflate(
            R.layout.fragment, container, false);

    Bundle args = getArguments();

    text1 = (TextView) rootView.findViewById(R.id.text1);
    text1.setText(args.getString(ARG_TEXT));

    textCount = (TextView) rootView.findViewById(R.id.txtCount);
    textCount.setText(args.getInt(ARG_POSITION) + " / " + args.getInt(ARG_COUNT));

    return rootView;
}
}

StartAppScreen.java

public class StartAppScreen extends AppCompatActivity implements View.OnClickListener {

private DatabaseHelper mDBHelper;
private SQLiteDatabase mDb;
ViewPager mViewPager;
TextPagerAdapter mTextPagerAdapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.patters_layout);

    List<String> data = new ArrayList<>();
    mDBHelper = new DatabaseHelper(this);

    init();

    Intent intent = getIntent();
    String condition = intent.getStringExtra("condition");
    String column = intent.getStringExtra("column");
    Boolean allWords = intent.getBooleanExtra("allWords", false);

    data.addAll(getDataFromTable(mDb, column, condition, allWords));

    if (allWords) Collections.shuffle(data);

    mTextPagerAdapter = new TextPagerAdapter(
            getSupportFragmentManager(), data);

    mViewPager.setAdapter(mTextPagerAdapter);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.btnDel:
            String s = mTextPagerAdapter.getTextVP(mViewPager.getCurrentItem());
            /*Delete data from db*/
            mDb.delete(TABLE_NAME, WORD_ROW_NAME + "= ?", new String[] {s} );
            /*It is not work*/
            mTextPagerAdapter.notifyDataSetChanged();
            break;
    }
}


private void init() {

    try {
        mDBHelper.updateDataBase();
    } catch (IOException mIOException) {
        throw new Error("UnableToUpdateDatabase");
    }

    try {
        mDb = mDBHelper.getWritableDatabase();
    } catch (SQLException mSQLException) {
        throw mSQLException;
    }

    Button btnAdd = (Button) findViewById(R.id.btnAdd);
    btnAdd.setOnClickListener(this);
    Button btnDel = (Button) findViewById(R.id.btnDel);
    btnDel.setOnClickListener(this);
    mViewPager = (ViewPager) findViewById(R.id.pager);
}
}

实际上,您没有更新 TextPagerAdapter 中的字符串列表。您仅在数据库中更新。再次获取数据并更改mTextPagerAdapter中data字段的值。