タグ付けされた質問 「android-viewpager」

ユーザーがスワイプできる子ビューのレイアウトを管理するViewGroup。

24
フラグメントがViewPagerに表示される時期を判断する方法
問題:フラグメントonResume()にはViewPagerフラグメントが実際に目に見えるようになる前に発射されます。 たとえば、との2つのフラグメントがViewPagerありFragmentPagerAdapterます。2番目のフラグメントは許可されたユーザーのみが使用でき、フラグメントが表示されたときに(アラートダイアログを使用して)ログインするようユーザーに要求する必要があります。 しかし、ViewPagerは、2番目のフラグメントをキャッシュするために最初のフラグメントが表示されるときに2番目のフラグメントを作成し、ユーザーがスワイプを開始するとそれを表示します。 したがって、onResume()イベントは、2番目のフラグメントで表示されるずっと前に発生します。そのため、2番目のフラグメントが表示されて適切なタイミングでダイアログが表示されたときに発生するイベントを見つけようとしています。 これはどのように行うことができますか?

30
ViewPager PagerAdapterがビューを更新しない
互換性ライブラリのViewPagerを使用しています。私はそれがいくつかのビューを表示できるように成功しました。 しかし、新しいビューのセットでViewPagerを更新する方法を理解するのに苦労しています。 新しいデータリストを使用するたびに、新しいアダプタを作成するなど、の呼び出しなどmAdapter.notifyDataSetChanged()、あらゆる種類のことを試しましたmViewPager.invalidate()。 テキストビューは元のデータから変更されないままです。 更新: 小さなテストプロジェクトを作成しましたが、ほとんどビューを更新できました。以下のクラスを貼り付けます。 更新されていないように見えるのは2番目のビューです。「B」は残り、更新ボタンを押すと「Y」が表示されます。 public class ViewPagerBugActivity extends Activity { private ViewPager myViewPager; private List<String> data; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); data = new ArrayList<String>(); data.add("A"); data.add("B"); data.add("C"); myViewPager = (ViewPager) findViewById(R.id.my_view_pager); myViewPager.setAdapter(new MyViewPagerAdapter(this, data)); Button updateButton = (Button) findViewById(R.id.update_button); updateButton.setOnClickListener(new OnClickListener() { @Override …

24
ViewPagerで指でスワイプしてページングを無効にし、プログラムでスワイプできるようにするにはどうすればよいですか?
ViewPagerがあり、その下に10個のボタンがあります。ボタン#4などをクリックすると、ポケットベルはによってすぐにページ4に移動しmPager.setCurrentItem(3);ます。しかし、指で水平にスワイプしてページングを無効にしたいと思います。したがって、ページングはボタンをクリックすることによってのみ行われます。では、指でのスワイプを無効にするにはどうすればよいですか?

30
IllegalStateException:ViewPagerでonSaveInstanceStateの後にこのアクションを実行できません
市場のアプリからユーザーレポートを取得していますが、次の例外があります。 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyUp(Activity.java:2044) at android.view.KeyEvent.dispatch(KeyEvent.java:2529) at android.app.Activity.dispatchKeyEvent(Activity.java:2274) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) at android.app.Activity.dispatchKeyEvent(Activity.java:2269) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.widget.TabHost.dispatchKeyEvent(TabHost.java:297) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at …

10
ViewPagerとフラグメント—フラグメントの状態を保存する正しい方法は何ですか?
フラグメントは、UIロジックをいくつかのモジュールに分離するのに非常に適しているようです。しかし、ViewPagerそのライフサイクルとともに、私にはまだ霧がかかっています。だからグルの考えはひどく必要です! 編集する 以下のばかげた解決策を参照してください;-) 範囲 メインアクティビティにはViewPagerフラグメントがあります。これらのフラグメントは、他の(サブメイン)アクティビティに対して少し異なるロジックを実装できるため、フラグメントのデータはアクティビティ内のコールバックインターフェイスを介して入力されます。そして、すべては最初の起動で正常に動作しますが、!... 問題 アクティビティが再作成されたとき(たとえば、方向が変更されたとき)ViewPagerのフラグメントを作成します。コード(以下にあります)は、アクティビティが作成されるたびに、ViewPagerフラグメントと同じ新しいフラグメントアダプターを作成しようとする(多分これが問題である)と述べていますが、FragmentManagerはすでにこれらのフラグメントをどこかに(どこに?)格納しています。それらのレクリエーションメカニズムを開始します。したがって、レクリエーションメカニズムは、アクティビティの実装されたメソッドを介してデータを開始するためのコールバックインターフェース呼び出しで「古い」フラグメントのonAttach、onCreateViewなどを呼び出します。ただし、このメソッドは、アクティビティのonCreateメソッドで作成された、新しく作成されたフラグメントを指します。 問題 多分私は間違ったパターンを使用していますが、Android 3 Proの本でさえそれについてあまり詳しくありません。だから、してください、私に一から二パンチを与え、それを正しい方法を行う方法を指摘しています。どうもありがとう! コード 主な活動 public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener { private MessagesFragment mMessagesFragment; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d("Dash onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_container); new DefaultToolbar(this); // create fragments to use mMessagesFragment = new MessagesFragment(); mStreamsFragment = new StreamsFragment(); // …

7
FragmentPagerAdapterとFragmentStatePagerAdapterの違いは何ですか?
違いは何であるFragmentPagerAdapterとはFragmentStatePagerAdapter? FragmentPagerAdapterGoogleのガイドについて言う: このバージョンのページャーは、一連のタブなど、ページングされる一般的に静的なフラグメントがいくつかある場合に最適です。ユーザーがアクセスする各ページのフラグメントはメモリに保持されますが、ビューの階層は表示されない場合は破棄される可能性があります。これにより、フラグメントインスタンスが任意の量の状態を保持できるため、大量のメモリを使用する可能性があります。より大きなページセットについては、を検討してくださいFragmentStatePagerAdapter。 そして約FragmentStatePagerAdapter: このバージョンのページャーは、ページ数が多く、リストビューのように機能する場合により便利です。ページがユーザーに表示されない場合、フラグメント全体が破棄され、そのフラグメントの保存された状態のみが維持されます。これにより、ページャーは、ページをFragmentPagerAdapter切り替えるときにオーバーヘッドが増える可能性があるという犠牲を払って、訪問した各ページに関連付けられているメモリをはるかに少なく抑えることができ ます。 だから私はたった3つの断片を持っています。しかし、それらはすべて、大量のデータを持つ個別のモジュールです。 Fragment1(ユーザーが入力する)いくつかのデータを処理しFragment2、アクティビティを介してに渡しListFragmentます。これは単純です。Fragment3もListFragmentです。 だから私の質問は:どのアダプターを使うべきですか?FragmentPagerAdapterまたはFragmentStatePagerAdapter?

20
ViewPagerを動的に更新しますか?
ViewPagerでコンテンツを更新できません。 FragmentPagerAdapterクラスのメソッドinstantiateItem()およびgetItem()の正しい使用法は何ですか? 私はgetItem()だけを使用してフラグメントをインスタンス化して返していました: @Override public Fragment getItem(int position) { return new MyFragment(context, paramters); } これはうまくいきました。内容を変更できない以外は。 だから私はこれを見つけました:ViewPager PagerAdapterがビューを更新していません 「私のアプローチは、instantiateItem()メソッドでインスタンス化されたビューにsetTag()メソッドを使用することです」 これを行うために、instantiateItem()を実装したいと思います。しかし、私は何を返さなければならないのか(タイプはObjectです)、そしてgetItem(int position)との関係は何ですか? リファレンスを読んだ: public abstract Fragment getItem(int position) 指定された位置に関連付けられたフラグメントを返します。 public Object instantiateItem(ViewGroupコンテナー、int位置) 指定された位置にページを作成します。アダプターは、ここで指定されたコンテナーにビューを追加する必要がありますが、finishUpdate(ViewGroup)から戻るまでにこれが確実に行われるようにする必要があります。パラメーター コンテナーページが表示されるコンテナーを含むビュー。positionインスタンス化されるページの位置。 戻り値 新しいページを表すオブジェクトを返します。これはビューである必要はありませんが、ページの他のコンテナにすることができます。 まだ分​​かりません。 これが私のコードです。サポートパッケージv4を使用しています。 ViewPagerTest public class ViewPagerTest extends FragmentActivity { private ViewPager pager; private MyFragmentAdapter adapter; @Override …

18
ViewPager内のフラグメントを置き換える
を使用してフラグメントを使用しようとしViewPagerていFragmentPagerAdapterます。私が達成しようとしているのは、の最初のページに配置されたフラグメントViewPagerを別のフラグメントに置き換えることです。 ページャーは2つのページで構成されています。1つ目は、FirstPagerFragment2つ目はSecondPagerFragmentです。最初のページのボタンをクリックする。をFirstPagerFragmentNextFragmentに置き換えます。 以下に私のコードがあります。 public class FragmentPagerActivity extends FragmentActivity { static final int NUM_ITEMS = 2; MyAdapter mAdapter; ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); } /** * Pager Adapter */ public static class MyAdapter extends FragmentPagerAdapter { public …




30
ビューページャーで現在のFragmentインスタンスを取得する
以下は、3 Fragment classesの3つのタブそれぞれに埋め込まれたコードViewPagerです。メニューオプションがあります。に示すように、onOptionsItemSelected()オプションを選択して、現在表示されているフラグメントを更新する必要があります。これを更新するには、フラグメントクラスにあるメソッドを呼び出す必要があります。誰かがそのメソッドを呼び出す方法を提案できますか? public class MainActivity extends ActionBarActivity { ViewPager ViewPager; TabsAdapter TabsAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewPager = new ViewPager(this); ViewPager.setId(R.id.pager); setContentView(ViewPager); final ActionBar bar = getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); //Attaching the Tabs to the fragment classes and setting the tab title. TabsAdapter = new TabsAdapter(this, ViewPager); TabsAdapter.addTab(bar.newTab().setText("FragmentClass1"), …

6
異なるフラグメント/レイアウトでViewPagerを実装する方法
viewpagerを実装するアクティビティを開始すると、viewpagerはさまざまなフラグメントを作成しました。フラグメントごとに異なるレイアウトを使用したいのですが、問題は、viewpagerが最大で2つのレイアウトしか表示しないことです(1の後に残っているすべてのフラグメントの2番目のレイアウト)。 以下は、viewpagerを実装するSwipeActivity のコードです。 public class SwipeActivity extends FragmentActivity { MyPageAdapter pageAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_swipe); pageAdapter = new MyPageAdapter(getSupportFragmentManager()); ViewPager pager=(ViewPager)findViewById(R.id.pager); pager.setAdapter(pageAdapter); ActionBar bar = getActionBar(); bar.setDisplayHomeAsUpEnabled(true); } /** * Custom Page adapter */ private class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } …


3
ViewPagerを使用したAndroid.app Fragments対android.support.v4.app?
Androidサポートライブラリ、フラグメント、具体的な例としてViewPagerクラスについて質問があります。私の意図は、Androidデベロッパーウェブサイト(http://developer.android.com/training/animation/screen-slide.htmlまたはhttp://developer.android.com/)で提供されているサンプルと同様の機能を備えたアプリを作成することです。training / implementing-navigation / lateral.html)。彼らのコードを見ると、彼らがandroid.support.v4.appライブラリを利用していることに気づきました。これは、私の研究から、ViewPagerクラスにアクセスする唯一の方法です。 私の状況では、下位互換性には関心がありません。最小APIレベルは14(Ice Cream Sandwich)で、ビルドターゲットは4.2 Jelly Beanです。最も単純な形式では、私のアプリは、Android開発Webサイトでリンクした2番目のデモとまったく同じように機能します。それぞれのコンテンツを含む3つのタブ間をスワイプするだけです。 私が読んだすべての記事/投稿/回答は、v4サポートライブラリを非常に支持しているようです。さて、私にとって、長い間ですが、質問: 私のアプリケーションを構造化するための最良の方法は何ですか-を使用しandroid.support.v4.app、それによってSupportFragmentsを使用するか、またはで提供されるFragmentsを使用しますandroid.app-その理由は? からの断片android.appが行く方法である場合、アプローチする最適な方法は何ViewPagersですか? SupportFragmentsがタスクに最適である場合、それらが他の機能と同じ機能を持っていると私は推定します-それで、それらをすべて内部に持つ目的は何android.appですか? うまくいけば、より明確な理解を持った誰かが私を少し説明してくれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.