Android - 如何在适配器中管理viewpager的位置?

时间:2015-08-03 09:18:12

标签: android android-viewpager

我正在开发android app,其中我正在显示一个包含多个项目的ListView。点击项目我正在传递项目名称和所有项目的ArrayList

Intent myIntent = new Intent(context, DetailActivity.class);
            myIntent.putExtra("name", name);
            myIntent.putStringArrayListExtra("arraylistofitems", arraylistofitems);
            context.startActivity(myIntent);

DetailActivity中,我想显示列表中点击的项目,on scroll left or right显示list中的剩余项目。我正在使用以下代码 -

Intent mIntent = getIntent();
    name = mIntent.getStringExtra("name");
    names = mIntent.getStringArrayListExtra("arraylistofitems");
    viewPager = (ViewPager) findViewById(R.id.idofviewpager);
    adapter = new ViewPagerAdapter(context, arraylistofitems);
    viewPager.setAdapter(adapter);

和ViewPagerAdapter看起来如下 -

public ViewPagerAdapter(Context context,ArrayList<String> data) {
    this.context = context;
    this.data=data;
}

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

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((MyLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

    // item views declaration

    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = inflater.inflate(R.layout.viewpager_item_id, container,
            false);

    //layout item initialization

    ((ViewPager) container).addView(itemView);

    ParseQuery<ParseObject> query = ParseQuery.getQuery("myclass");
    query.whereEqualTo("colName", data.get(position));
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> itemList, ParseException arg1) {
            for (int i = 0; i < itemList.size(); i++) {
                ParseObject po = itemList.get(i);

                //set the values from parse into views
            }
        }
    });


    return itemView;

}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((MyLayout) object);

}

但所有数据都从开始显示(第0个位置到arraylist的长度)。

问题 - 我如何实现滚动效果,点击项目被打开,滚动左侧项目应该显示,反之亦然?

1 个答案:

答案 0 :(得分:1)

您可以做一件事,传递被点击的项目的位置,并在您获取项目名称和列表数组时获取您的详细活动。然后调用以下行 -

    viewPager.setCurrentItem(position);

所以,现在没有必要管理适配器的位置。适配器将照顾它。