1

FragmentActivity と 3 つの Fragments で構成されるアプリケーションを開発しています。「次へ」ボタンを使用して、最初のフラグメントから 3 番目と最後のフラグメントに移動したいと考えています。そのために、viewPager と pagerAdpater を使用しています (viewpager のページング/スワイプを無効にしました)。私の「次へ」ボタンは、独自のフラグメントに実装されています。フラグメントごとに 1 つの xml レイアウトと、viewpager を含む fragmentActivity 用に 1 つの xml レイアウトがあります。

setCurrentItem(index) メソッドを使用して最初のビューから最後のビューに移動できる OnClickListener を使用しようとしています。

問題は、フラグメントにビューページャーの参照がないため、OnClickListener をどこに配置できるかわからないことです。

フラグメントでビューページャーの参照を取得するにはどうすればよいですか? OnClickListener メソッドを別の場所に配置する必要がありますか?

これが私の3つのフラグメントの1つのコードです:

public class InitializationStep1 extends Fragment{
private PagerAdapter mPagerAdapter;

CustomViewPager pager;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = (LinearLayout)inflater.inflate(R.layout.initialization_step1_layout, container, false);

    Button button = (Button) v.findViewById(R.id.goToStep2);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            CustomViewPager pager = (CustomViewPager) v.findViewById(R.id.viewpager);
            if(pager == null)
                System.out.println("It's null..."); // always getting a null value
            else
                pager.setCurrentItem(0);
        }
    });

    return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    setUserVisibleHint(true);
   }
}

これは私の FragmentActivity です:

public class Initialization extends FragmentActivity{
private PagerAdapter mPagerAdapter;

CustomViewPager pager;
Button b1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.viewpager_initialization_layout);

    //initialize the pager

    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, InitializationStep1.class.getName()));
    fragments.add(Fragment.instantiate(this, InitializationStep2.class.getName()));
    fragments.add(Fragment.instantiate(this, InitializationStep3.class.getName()));
    this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments);

    pager = (CustomViewPager)super.findViewById(R.id.viewpager);
    pager.setPagingEnabled(false);
    pager.setAdapter(this.mPagerAdapter);
    pager.setCurrentItem(0);
    }
}

これをすべてまとめると、次のようになります: -
3 つのフラグメント (1、2、および 3)
を実装し、取得したい:
- 次のフラグメントに移動するためのボタンを含む各フラグメント (1 -> 2 -> 3)。
- 「終了」ボタンを含む最後のフラグメント (ナビゲートする次のフラグメントがないため)

これは非常に単純なアクションだと思いますが、私は Android 開発に比較的慣れていないため、これを理解できませんでした。そのために間違ったコンポーネントを使用しようとしているのかもしれません。

ありがとう

4

1 に答える 1

2

私はちょうど同じ問題を抱えていました、これを試してください!初期化 FragmentActivity で:

public CustomViewPager getpager(){
        return pager;
    }

「InitializationStep1」:

CustomViewPager pager;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = (LinearLayout)inflater.inflate(R.layout.initialization_step1_layout, container, false);
    pager = ((Initialization)getActivity()).getpager();

    Button next = (Button) v.findViewById(R.id.button1);
    next.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            pager.setCurrentItem(2);
        }
    });

このようにして、FragmentActivity で宣言した viewpager オブジェクトを取得できるため、各フラグメントでそれを使用して、必要に応じてフラグメントを切り替えることができます。

于 2013-05-15T14:28:10.280 に答える