質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

3375閲覧

ViewPagerのgetCurrentItemが0しか返さない

Knsk

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/04/26 16:12

いつもお世話様です。

標題について、DirectionalViewPagerというライブラリを使用しています。
そのなかで、OnPageChangeListenerのonPageScrollStateChanged内で遷移先のPositionを取得しようと思っています。(state はSETTLING)
ですが、getCurrentItemを呼び出してもLogに現れるのは0のみになってしまっています。

次のように試してみましたが結果は変わりませんでした。

lang

1public class MainActivity extends ActionBarActivity { 2 3 private DirectionalViewPager dViewPager = null; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 dViewPager = (DirectionalViewPager)findViewById(R.id.viewPager); 10 dViewPager.setOrientation(DirectionalViewPager.VERTICAL); 11 12 final CalPagerAdapter cAdapter = new CalPagerAdapter(this); 13 dViewPager.setAdapter(cAdapter); 14 dViewPager.setCurrentItem(cAdapter.getCount()/2); 15 Log.v("CurrentItem", String.valueOf(dViewPager.getCurrentItem()));

PagerAdapterのgetCountは定数で100になっていて、中央を表示するようにしています。

OnPageChangeListenerのonPageSelectedでは引数Positionで正しい値が取得できるのですが...
Google公式リファレンスを見てもgetCurrentItemについては説明がなく困っております。
0が返ってしまう原因として考えられるものを教えていただきたいです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Log.v("hoge",((DirectionalViewPager.SavedState)(dViewPager.onSaveInstanceState)).toString());
としたときに出力される"position"の値がsetCurrentItem()した値になりそうなのですが、こちらは期待する値になりますか?

また、DirectionalViewPagerではなくViewPagerを使用した場合は値が正しく取れますか?

公開されているDirectionalViewPagerのソースを軽く見た感じだとsetCurrentItem()とgetCurrentItem()がつながっていないように見えるのですが。。。

投稿2015/04/29 10:31

okazu

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Knsk

2015/04/29 14:54

一つ目のご指摘に関しては、私の理解が足らず確認することができませんでした。 ですが、二つ目のViewPager(support.v4~)でDirectionalViewPagerの部分だけを変えて getCurrentItemを実行させたところ、、、期待した値が出力されました。 これはライブラリ側で不都合が発生しているということなのでしょうか? 縦スワイプでPagerを利用したくDirectionalViewPagerにたどり着いたのですがどうしたものか。。。
okazu

2015/05/01 08:30

一つ目の確認についてはコンパイルもせずに書いてしまいましたので動かないかもしれません。。失礼しました。。 ViewPagerで正しく動くとなるとDirectionalViewPagerの仕様としてgetCurrentItem()は正しく動かないのかもしれませんね。 getCurrentItem()を使って取得するのではなくonPageSelected()の引数をグローバルな変数に記憶させておいて使う形で実現できないでしょうか。
Knsk

2015/05/01 14:53

実は、onPageSelectedの引数を変数に記憶させて、onPageScrollStateChangedのSCROLL_STATE_IDLE内で処理を行うということは試していたのですが、 どうしてもレスポンスが悪く見送っていました。(SETTLINGはonPageSelectedの前の状態であるようでした) その処理については、もう少し方法を模索してみることにします。 ともかく、DirectionalViewPagerの仕様が一般的なViewPagerと異なっているということが分かりとても助かりました。 okazuさん、swordoneさん、ご回答本当にありがとうございました。
guest

0

cAdapterの実際のページ数が1ページしかないのではないでしょうか?
getCountを"定数で"返しているということは,実際の中身については一切関知していないわけですね?
実際のページ数が1ページしかないのであれば,いくら50ページ目を指定したところで
最終ページである1ページ目(インデックス値としては0)しか表示しようがありません.
onPageSelectedについても,あくまで「50ページ目が選択された」というイベントが取得されているに過ぎず,
実際表示されるページは実際のページ数依存になるわけです.

投稿2015/04/27 06:13

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Knsk

2015/04/27 06:33

すみません、質問のほうでは端折ってしまっていたのですがcAdapterのinstantiateItem内でカスタムレイアウトのインスタンス取得はしています。なおかつ、引数のPositionに応じてレイアウト内の数値を変えて、スワイプで各レイアウトの表示自体もgetCountの戻り値分確認は出来ています。 今まで、getCountの戻り値が実際のページ数になり、setCurrentItemで任意のページ番号を最初に表示できる、という理解でいたのですがそれがそもそも違うのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問