2016-08-30 5 views
0

ViewPager(3ページあり)を使ってアプリケーションを作成していますが、今はSQLデータベースにアクセスする最初のページを作成し、 ListView(この機能は最初のページだけで、他のページはまだ実装されていない他の機能を持っています)が、私の問題はデータが間違ったページ(Second Page)に印刷されることです。私はgetCurrentItem()という方法を使って私がどのページにいるかを知っています。次のような方法onCreateView内のコードは次のとおりです。 getCurrentItemは現在のアイテムをAndroidで返していません

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

List<String> array = new ArrayList<>(); 

ViewPager pg = (ViewPager) container; 
int current = pg.getCurrentItem(); 

if (current == 0) { 
    // Database access, I'm using a Cursor for the DB and adding 
    // the data to an arrayList to print it using the ArrayAdapter, 
    // I don´t know if this is the most properly way of doing it 
    // but currently my main purpose is making this works 
} 

ArrayAdapter adapt = new ArrayAdapter(getActivity(), R.layout.fragment_prioridad_alta, R.id.textTarea, array); 
ListView lv = (ListView) rootView.findViewById(R.id.listView); 
lv.setAdapter(adapt); 

return rootView; 

ちょうど明確にするために、私はその後、データが最初のページに印刷された(ちょうど1回目)されたアプリケーションを初めて実行するとき、Iページの変更は2ページ目にのみ印刷され、最初のページには印刷されません。

次に、私はのonCreateメソッドで実装されているページのchangeListenerですのコードを追加します。

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_prioridad_alta); 

final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
toolbar.setTitle("Prioridad Alta"); 
setSupportActionBar(toolbar); 

mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

mViewPager = (ViewPager) findViewById(R.id.container); 
mViewPager.setAdapter(mSectionsPagerAdapter); 

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    } 

    @Override 
    public void onPageSelected(int position) { 
     switch(position){ 
      // Camnbia la pagina de prioridad 
      case 0: toolbar.setTitle("Prioridad Alta"); break; 
      case 1: toolbar.setTitle("Prioridad Media"); break; 
      case 2: toolbar.setTitle("Prioridad Baja"); break; 
     } 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 

これはPagerAdapterのコードです:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return PlaceholderFragment.newInstance(position + 1); 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Prioridad Alta"; 
      case 1: 
       return "Prioridad Media"; 
      case 2: 
       return "Prioridad Baja"; 
     } 
     return null; 
    } 
} 
+0

時に断片化する送信位置を使用するには、タイトルが正しくsetedのですか?スクロールするときは? –

+0

はい、タイトルは完璧に動作します –

+0

ポケットベル用アダプターをポストすることができます –

答えて

0

フラグメントに位置を渡すので、渡す位置を確認してください。フラグメントがページ0のページ1が初期化されたときに選択される前に初期化されるので、ページャ選択インデックスの代わりにフラグメントを使用することができる。

ので、代わりの

int current = pg.getCurrentItem(); 

あなたがのnewInstanceで作成断片(位置+1)

int current =position -1; 
+0

私はこのコードを実装しています 'ViewPager pg =(ViewPager)container; SectionsPagerAdapter mPagerAdapter =(SectionsPagerAdapter)pg.getAdapter(); int current = mPagerAdapter.getPosition() - 1; 'しかし、まったく同じ問題が発生しました –

+0

PagerAdapterに位置とメソッドのプライベート変数(' private int pos')を追加しました 'public int getPosition ){return pos;} ' –

+0

mPagerAdapter.getPosition()ではなく、PlaceholderFragment.newInstance(position + 1)で送信する位置だけです。ページャーには一切アクセスしないでください –

0

使用

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {  
     conterchange.setText(""+(1+position)); 
    } 

    @Override 
    public void onPageSelected(int position) { 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 
}); 
+0

リスナーはonCreateメソッドで実装されています。 onPageScrolledのコードに関する質問 'conterchange.setText(" "+(1 + position));'? –

+1

これは私のコードで使用されています.. – Ashish

関連する問題