2

私のアプリにはListView起動中があります。ユーザーは、 で項目を手動で選択ListViewして詳細画面に移動するか、 を使用してさまざまな詳細画面間をスワイプできViewPagerます。フラグメントは次のViewPager'sようにセットアップされます。

上場
詳細 1
詳細2
詳細 3
詳細4
...

私の理解では、Listing フラグメントがロードされると、ViewPagerパフォーマンスのために詳細 1 のコードが実行されます。Detail 1 がロードされたときと同じように、Detail 2 のコードが実行されます。

私が直面している問題は、各詳細フラグメントのタイトルを に設定していることですがonActivityCreated、リスト フラグメントが読み込まれると、詳細 1 のタイトルが表示されます。これはonPageSelectedViewPagerユーザーがスワイプしている場合に機能しますが、ユーザーがListViewタイトル内の項目を手動で選択した場合は設定されません。

ユーザーがスワイプしているときではなく、アイテムを手動で選択したときにのみ発生するイベントがあるかどうか、ListViewまたはアプリのセットアップを再考する必要があるかどうかはわかりません。たとえば、Listing フラグメントのonListItemClickイベントで次のコードを使用する代わりに、次のようにします。

final Intent listing = new Intent(getActivity().getApplicationContext(), Details.class);
startActivity(listing);

をどうにかして使う必要がありますViewPager

mViewPager = (ViewPager)findViewById(R.id.viewpager);  
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());  
mViewPager.setAdapter(mMyFragmentPagerAdapter);
mViewPager.setSaveEnabled(false);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int position) {      
        String title = GetTitle(position);
        getSupportActionBar().setTitle(title);                  
    }

    @Override
    public void onPageScrolled(int position, float offset, int offsetPixel) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});
4

1 に答える 1

3

getPageTitle(int)おそらく、MyFragmentPagerAdapterクラスでメソッドをオーバーライドしたいと思うでしょう。ドキュメントには次のように記載されています。

このメソッドは、ViewPager によって呼び出され、指定されたページを説明するタイトル文字列を取得できます。このメソッドは、このページのタイトルがないことを示す null を返す場合があります。デフォルトの実装は null を返します。

したがって、 を返すのではなくnull、実際のページ タイトルを返すようにしてください。タイトルが要求されているページの位置/インデックスが渡されるため、単純な switch-case ステートメントで十分です。または、ページのインターフェイスを設定し、関連するページのタイトルを照会することもできます。

于 2013-01-20T18:25:47.930 に答える