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

[Update ViewPager를 동적으로 복제 할 수 있습니까?] (https://stackoverflow.com/questions/10849552/update-viewpager-dynamically) –

+0

시도했지만 작동하지 않았습니다. –

답변

0

사실, 당신은 당신의 TextPagerAdapter에 문자열의 목록을 업데이트하지 않습니다. DB에서만 업데이트합니다. 데이터를 다시 가져 와서 데이터 필드의 값을 mTextPagerAdapter에서 변경하십시오.

+0

고마워, 작동합니다. Before mTextPagerAdapter.notifyDataSetChanged(); data.remove (mViewPager.getCurrentItem());을 작성했습니다. –