1

我已经为此苦苦挣扎了一段时间。

我从常规活动切换到现在使用片段(根据用户建议),但我遇到了同样的问题。

我有 3 个页面,现在是 ViewPager 中的 3 个片段。我想要 addSite 片段中带有 id addSiteButton 的按钮;单击时,滚动到 setCurrentItem(2)。

任何帮助表示赞赏!这是我的代码。

片段活动

public class fieldsActivity extends FragmentActivity {


private static final int NUMBER_OF_PAGES = 3;

ViewPager mPager;
MyFragmentPagerAdapter mMyFragmentPagerAdapter;


/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // to create a custom title bar for activity window
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

    setContentView(R.layout.fields);
    // use custom layout title bar
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);

    mPager = (ViewPager) findViewById(R.id.fieldspager);
    mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mMyFragmentPagerAdapter);
    mPager.setCurrentItem(1);


}


private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int page) {

        switch (page) {

            case 0: return new settingFields();

            case 1: return new addSite();

            case 2: return new createSite();

        }

       return null;


    }

    @Override
    public int getCount() {

        return NUMBER_OF_PAGES;
    }

}

带按钮的班级

public class addSite extends Fragment {


public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    if (container == null) {
        return null;
    }

    RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.add_site, container, false);
    final ViewPager mPager = (ViewPager) mRelativeLayout.findViewById(R.id.fieldspager);
    Button addSiteButton = (Button) mRelativeLayout.findViewById(R.id.addSiteButton);
    addSiteButton.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {

            mPager.setCurrentItem(2, true);

        }
    });

   return mRelativeLayout;

}
}

我觉得我在兜圈子,没有得到想要的动作。

谢谢您的帮助!

4

1 回答 1

2

只需将 Fragment 作为 FragmentActivity 中的一个类,并取出变量阴影,onCreateView()因为您的寻呼机是一个全局变量。

public class fieldsActivity extends FragmentActivity {


  private static final int NUMBER_OF_PAGES = 3;

  ViewPager mPager;
  MyFragmentPagerAdapter mMyFragmentPagerAdapter;


  /**
   * Called when the activity is first created.
   */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // to create a custom title bar for activity window
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

    setContentView(R.layout.fields);
    // use custom layout title bar
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);

    mPager = (ViewPager) findViewById(R.id.fieldspager);
    mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mMyFragmentPagerAdapter);
    mPager.setCurrentItem(1);


  }

  public static class addSite extends Fragment {


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

      RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.add_site, container, false);
      //final ViewPager mPager = (ViewPager) mRelativeLayout.findViewById(R.id.fieldspager);
      Button addSiteButton = (Button) mRelativeLayout.findViewById(R.id.addSiteButton);
      addSiteButton.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {

        mPager.setCurrentItem(2, true);

        }
      });

      return mRelativeLayout;

    }
  }
}

Also consider using the @Override annotation whenever you override a method so you don't make mistakes and use proper naming conventions. Java classes start with a capital.

于 2013-01-22T22:04:56.553 回答