7

ViewPagergetPageTitleメソッドを使用して現在のページのタイトルを取得している。

アダプタコードは次のとおりです。

    @Override
    public Fragment getItem(int i) {
        details = productData.get(i);
        Fragment fragment = new ProductViewFragment();
        Bundle args = new Bundle();
        args.putInt(ProductViewFragment.ARG_SECTION_NUMBER, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return productData.size();
    }

    public CharSequence getPageTitle(int position) 
    {
      return (position+1)+" of "+myData.size();
    }

次に、前のフラグメントと次のフラグメントのページタイトルを更新したいと思います。それらに「前」と「次」という名前を付けたいと思います。また、後続のページでも動的に更新する必要があります。

現在のページタイトル番号を取得できます。たとえば、5番目のフラグメントを表示すると、現在のフラグメントにタイトルが正しく表示されます。また、ViewPagerの両隅に、左側に前のページのタイトル番号、右側に次のページのタイトル番号が表示されます。ここで、Gmailアプリと同様に、ページタイトルを左側に「前」、右側に「次へ」と表示し、ViewPagerにメール数を表示する方法を示します。

私が知りたい主なことは、Gmailアプリの場合と同じように、現在のフラグメントの次の/前のフラグメントのページタイトルデータにアクセス/変更するにはどうすればよいですか?

4

1 に答える 1

6

これは、に付属のサンプルに基づいていViewPagerIndicatorます。

基本的に、ページが変更されたときにリッスンし、現在の位置に応じて異なるページタイトルを表示するようにアダプタに指示します。

これらのサンプルが機能していて、これら2つのファイルを置き換えるだけの場合は、サンプルの[タイトル]->[デフォルト]を試してみてください。問題なく機能します...

次のようにコードを変更しましたTestFragmentAdapter

package com.viewpagerindicator.sample;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.viewpagerindicator.IconPagerAdapter;

class TestFragmentAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
    protected static final String[] CONTENT = new String[] { "This", "Is", "A", "Test", };
    protected static final int[] ICONS = new int[] {
            R.drawable.perm_group_calendar,
            R.drawable.perm_group_camera,
            R.drawable.perm_group_device_alarms,
            R.drawable.perm_group_location
    };

    private int mCount = CONTENT.length;

    // CHANGE STARTS HERE
    private int current_position=0;

    public void set_current_position(int i) {
        current_position = i;
    }
    // CHANGE ENDS HERE

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

    @Override
    public Fragment getItem(int position) {
        return TestFragment.newInstance(CONTENT[position % CONTENT.length]);
    }

    @Override
    public int getCount() {
        return mCount;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // CHANGE STARTS HERE
        if (position == current_position-1) {
            return "Previous";
        } else if (position == current_position+1) {
            return "Next";
        }
        // CHANGE ENDS HERE
        return TestFragmentAdapter.CONTENT[position % CONTENT.length];
    }

    @Override
    public int getIconResId(int index) {
      return ICONS[index % ICONS.length];
    }

    public void setCount(int count) {
        if (count > 0 && count <= 10) {
            mCount = count;
            notifyDataSetChanged();
        }
    }
}

のコードはSampleTitlesDefault次のようになります(OnPageChangeListenerを追加)

package com.viewpagerindicator.sample;

import android.os.Bundle;
import android.support.v4.view.ViewPager;

import com.viewpagerindicator.TitlePageIndicator;

// CHANGE ADDED implements.... HERE
public class SampleTitlesDefault extends BaseSampleActivity implements ViewPager.OnPageChangeListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_titles);

        mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
        // CHANGE STARTS HERE
        mIndicator.setOnPageChangeListener(this);
        // CHANGE ENDS HERE
    }

    // CHANGE STARTS HERE
    @Override
    public void onPageScrolled(int i, float v, int i1) {
    }

    @Override
    public void onPageSelected(int i) {
        mPager = (ViewPager)findViewById(R.id.pager);
        ((TestFragmentAdapter)mPager.getAdapter()).set_current_position(i);
    }

    @Override
    public void onPageScrollStateChanged(int i) {
    }
    // CHANGE ENDS HERE
}
于 2012-12-06T06:31:23.743 に答える