0

我有一個ViewPager。數據存儲在數據庫中。我想動態更新它。元素必須立即消失,但不起作用。我調用onCreate方法後更新數據。我嘗試所有的建議,但它沒有幫助。我做錯了什麼?請幫我找一個解決方案。動態更新viewpager

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); 
} 
} 
+1

[更新ViewPager動態?](https://stackoverflow.com/questions/10849552/update-viewpager-dynamically) –

+0

我試圖做到這一點,但它不起作用 –

回答

0

其實,你不要在你的TextPagerAdapter更新字符串列表。您僅在數據庫中更新。再次獲取數據並更改mTextPagerAdapter中的數據字段的值。

+0

謝謝,它的工作原理。在mTextPagerAdapter.notifyDataSetChanged()之前;我寫了data.remove(mViewPager.getCurrentItem()); –