0

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

[ViewPagerを動的に更新しますか?](https://stackoverflow.com/questions/10849552/update-viewpager-dynamically) –

+0

私はそれを試みましたが、機能しません。 –

答えて

0

実際に、あなたはあなたのTextPagerAdapter内の文字列のリストを更新しません。 DBでのみ更新します。データをもう一度フェッチし、mTextPagerAdapterのフィールドのデータの値を変更します。

+0

ありがとうございます。前にmTextPagerAdapter.notifyDataSetChanged();私はdata.remove(mViewPager.getCurrentItem());を書きました。 –

関連する問題