0

Ich habe einen ViewPager. Daten werden in der Datenbank gespeichert. Ich möchte es dynamisch aktualisieren. Es ist notwendig, dass das Element sofort verschwindet, aber es funktioniert nicht. Die Daten werden aktualisiert, nachdem ich die Methode onCreate aufgerufen habe. Ich versuche alle Ratschläge, aber es hilft nicht. Was habe ich falsch gemacht? Hilf mir bitte, eine Lösung zu finden.Update ViewPager dynamisch

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

Mögliche Duplikat [Update ViewPager dynamisch?] (Https://stackoverflow.com/questions/10849552/update-viewpager-dynamically) –

+0

ich es zu tun versucht, aber es funktioniert nicht –

Antwort

0

Eigentlich Sie nicht aktualisieren Liste der Zeichenfolge in Ihrem TextPagerAdapter. Sie aktualisieren nur in DB. Daten erneut abrufen und den Wert des Felds data in mTextPagerAdapter ändern.

+0

Dank, es funktioniert. Vor mTextPagerAdapter.notifyDataSetChanged(); Ich schrieb data.remove (mViewPager.getCurrentItem()); –

Verwandte Themen