Android - 如何管理 viewpager 在适配器中的位置?
Android - How to manage position of viewpager in adapter?
我正在开发一个 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
的长度)。
问题 - 我如何在打开点击项目时实现滚动效果,在向左滚动时应显示左侧项目,反之亦然?
你可以做一件事,传递被点击的项目的位置并在你的详细信息中获取它 activity 与获取项目名称和列表数组相同。然后调用以下行 -
viewPager.setCurrentItem(position);
因此,现在无需管理适配器上的位置。适配器会处理它。
我正在开发一个 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
的长度)。
问题 - 我如何在打开点击项目时实现滚动效果,在向左滚动时应显示左侧项目,反之亦然?
你可以做一件事,传递被点击的项目的位置并在你的详细信息中获取它 activity 与获取项目名称和列表数组相同。然后调用以下行 -
viewPager.setCurrentItem(position);
因此,现在无需管理适配器上的位置。适配器会处理它。