Android:Fragment和ViewPager始终在第一个位置启动

 钱靖均秀蓉怡慧 发布于 2023-02-03 10:20

我在Android应用程序中使用Master/Detail设计.如果我在ItemListActivity中单击列表视图中的项目,则会将位置提供给我的ItemDetailActivity.这个实现了ViewPager和FragmentStatePagerAdapter.所以我想在细节视图之间滑动.

我不知道如何告诉ViewPager从所需的位置开始(ItemListActivity中的整数).无论我在列表中点击哪一个,我的ViewPager始终位于列表的第0位.

这是我的代码:

ItemDetailActivity

public class ItemDetailActivity extends FragmentActivity {

    RSSFeed feed;
    int pos;
    private static List fragments;

    /**
     * The pager widget, which handles animation and allows swiping horizontally to access previous
     * and next wizard steps.
     */
    private ViewPager mPager;

    /**
     * The pager adapter, which provides the pages to the view pager widget.
     */
    private PagerAdapter mPagerAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // define layout of this activity
        setContentView(R.layout.activity_item_detail);

        // Get the feed object and the position from the Intent
        feed = (RSSFeed) getIntent().getExtras().get("feed");
        //position of the clicked item from the list
        pos = getIntent().getExtras().getInt("pos");

        //create all 20 ItemDetailFragments
        fragments = new ArrayList();
         for(int i=0; i<=20; i++)
                fragments.add(ItemDetailFragment.create(i ,feed));

        // Instantiate a ViewPager and a PagerAdapter.
        mPager = (ViewPager) findViewById(R.id.viewpager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setPageTransformer(true, new ZoomOutPageTransformer());
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            // If the user is currently looking at the first step, allow the system to handle the
            // Back button. This calls finish() on this activity and pops the back stack.
            super.onBackPressed();
        } else {
            // Otherwise, select the previous step.
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }

    /**
     * A simple pager adapter that represents ItemDetailFragment objects, in
     * sequence.
     * 
     * Creates a class that extends the FragmentStatePagerAdapter abstract class and
     * implements the getItem() method to supply instances of ScreenSlidePageFragment
     * as new pages. The pager adapter also requires that you implement the getCount()
     * method, which returns the amount of pages the adapter will create. 
     */
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

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

        @Override
        public Fragment getItem(int page_number) {
            return fragments.get(page_number);
        }

        @Override
        public int getCount() {
            //get the count of items in the feed
            return feed.getItemCount();
        }
    }

ItemDetailFragment:

/**
 * A fragment representing a single Item detail screen. This fragment is either
 * contained in a {@link ItemListActivity} in two-pane mode (on tablets) or a
 * {@link ItemDetailActivity} on handsets.
 */
public class ItemDetailFragment extends Fragment {

    private static int fPos;
    static RSSFeed fFeed;
    private ShareActionProvider mShareActionProvider;
    Date pDate;

    /**
     * Mandatory empty constructor for the fragment manager to instantiate the
     * fragment (e.g. upon screen orientation changes).
     */
    public ItemDetailFragment() {
    }

    /**
     * Factory method for this fragment class. Constructs a new fragment for the given page number.
     */
    public static ItemDetailFragment create(int pos, RSSFeed feed) {

        ItemDetailFragment fragment = new ItemDetailFragment();     
        Bundle args = new Bundle();
        args.putSerializable("feed", feed);
        args.putInt("pos", pos);
        fragment.setArguments(args);        
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // show ActionBar
        setHasOptionsMenu(true);

        // get data from DetailActivity
        fFeed = (RSSFeed) getArguments().getSerializable("feed");
        fPos = getArguments().getInt("pos");

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // inflate the fragment with the custom detail fragment
        View view = inflater
                .inflate(R.layout.detail_fragment, container, false);

        return view;
    }
@SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
               //here I put the data in my webview
    }

activity_item_detail.xml



   

    

    

所以目前我可以对所有项目进行平局,但始终从第一项开始.我想在我列表视图中点击的那个项目上启动它.

我怎样才能做到这一点?

1 个回答
  • 根据文档,您需要做的就是使用

    mPager.setCurrentItem(pos);
    

    http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setCurrentItem(int)

    2023-02-03 10:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有